Search code examples
solrstemming

Handling queries with singular/plural feature in Solr


I am trying to handle the singular/plural queries. Here is the text_general type schema

<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100" multiValued="true">
  <analyzer type="index">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
    <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.PorterStemFilterFactory"/>
  </analyzer>
  <analyzer type="query">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
    <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.PorterStemFilterFactory"/>
  </analyzer>
</fieldType>

Still the query results for "mobile" and "mobiles" are different. Any help would be greatly appreciated. Thank you.


Solution

  • Use solr.EnglishMinimalStemFilterFactory for token filter.

    Add this filter<filter class="solr.EnglishMinimalStemFilterFactory" /> to your analyzer type="query" and check in analysis page.

    "mobiles" will become "mobile"

    same can be done for indexing.

    Hope this helps