How to make solr synonyms work
To complete the answer from a newer Solr perspective I would like to add one thing when it comes to synonyms. Recent versions of Solr properly handle multi-word synonyms during query and index time.
To use the new synonyms implementation you would have to use a different filter, for example:
<filter class="solr.SynonymGraphFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
Also if you are using them during index time, put the following filter at the end of your analysis chain definition:
<filter class="solr.FlattenGraphFilterFactory"/>
Hopefully, someone will find that useful :)
Try using the SynonymFilterFactory during indexing only, not during querying.
The documentation suggests this as well: http://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters#solr.SynonymFilterFactory
For better understanding of synonym search, Please follow step by step process of implementation below (I am using solr 6.5.* version):
Step 1:
Download country-synonyms.txt text file and place it in below path:
Path: \solr-6.5.1\server\solr\yourCore\conf
yourCore: Name of core should be changed accordingly
Step 2:
Add Field type in managed-schema file in same path mentioned above:
<fieldType name="country" class="solr.TextField" positionIncrementGap="100" sortMissingLast="true">
<analyzer>
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.TrimFilterFactory"/>
<filter class="solr.SynonymFilterFactory" expand="false" ignoreCase="true" synonyms="country-synonyms.txt" tokenizerFactory="solr.KeywordTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer></fieldType>
Step 3: Add your field(Nationality) with type country in same file(managed-schema).
<field name="Nationality" type="country" indexed="true" stored="true"/>
Step 4: Restart solr.
solr restart -p <your solr port>
Step 5:
Now import your data with field containing Nationality.***
Step 6:
Now query with below cases and test:
Query:
- Nationality:US
- Nationality:USA
- Nationality:United States
- Nationality:United States of America
All above queries will give you same result.
Note:*** Import data only after performing above steps including solr restart. It may not work on existing data(For more details refer: AnalyzersTokenizersTokenFilters)