Starting with 2017 Week 37, a new fulltext search engine (the "Ferret" engine) has replaced the older MySQL FULLTEXT engines.
Operations Impact
- After upgrading, search indexes must be rebuilt.
- In some cases, Phabricator may require significantly more database disk space than before.
- Some fulltext-related features have changed in a way that is not backwards compatible, and may need adjustment to upgrade to the newer features.
- See below for more details and discussion.
New Features and Motivation
These are new features the engine adds:
- (T6721) You can search a particular field, like task titles, with title:platypus.
- You can search for a substring with the ~ operator, like ~latypu.
These are the bugs and issues this engine aims to address:
- (T12819) InnoDB FULLTEXT scalability issues. This was the largest single motivation for these changes. See this task for more details and technical discussion.
- (T12928) No support for very short terms like "v0.1".
- (T12443) Searches where more than 1,000 documents matched the query terms could return too few results.
- Searches could fail to find documents if some terms were only in the title while others were only in the description.
Upgrading
This engine has replaced the older engines, and search indexes must be rebuilt. The UI should notify you about this. See T11932 for details and guidance on rebuilding the index.
Note that the Ferret engine requires significantly more disk space for indexes than the older fulltext engines did: in extreme cases, total database storage may expand by 400% when the index is rebuild (for example, from 10GB to 50GB). For most installs with non-pathological data, a 25%-50% increase is probably a much better estimate. Make sure you have a comfortable amount of free space before upgrading. (Some of this space will be reclaimed in the future, but for now we are also retaining the older indexes in case we need to revert parts of this.)
Compatibility Breaks
The new Ferret engine fulltext fields have replaced some older similar fields. The new fields are more powerful, so it didn't make sense to retain the old fields. Specifically:
- The "fullText" parameter to maniphest.query is no longer supported. Use maniphest.search with the "query" constraint instead.
- The "Contains Words" field in Maniphest has been replaced with the new "Query" field. Saved searches which used a "Contains Words" constraint may need to be updated.
- The "Name Contains" field in Diffusion repository search has been replaced with the new "Query" field. Saved searches which used a "Name Contains" constraint may need to be updated. Note that the "Query" field searches descriptions (not just repository names), so you may need to use title:... to closely replicate the old field behavior.
In followup changes, some other "Name Contains" fields (or other fields with similar behavior) may also be replaced with "Query" fields.