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:

  1. Nationality:US
  2. Nationality:USA
  3. Nationality:United States
  4. 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)

Tags:

Solr

Synonym