How to make solr synonyms work

前端 未结 3 484
一生所求
一生所求 2021-02-07 21:36

I\'m trying to set up some basic synonyms in Solr. The one I\'ve been working on is:

us, usa, united states

My understanding is that adding that to the synonym f

相关标签:
3条回答
  • 2021-02-07 22:08

    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)

    0 讨论(0)
  • 2021-02-07 22:13

    Try using the SynonymFilterFactory during indexing only, not during querying.

    The documentation suggests this as well: http://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters#solr.SynonymFilterFactory

    0 讨论(0)
  • 2021-02-07 22:24

    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 :)

    0 讨论(0)
提交回复
热议问题