Solr exact word search

后端 未结 5 726
别那么骄傲
别那么骄傲 2020-12-01 14:16

I want to configure my Solr search engine so I get an exact match for the search term I enter.

eg. \'taxes\' should return documents with \'taxes\' and not \'tax\',

相关标签:
5条回答
  • 2020-12-01 14:37

    To turn off stemming in your schema.xml, you can define text field like this:

    <types>
    
       <!-- other fields definition -->
    
       <fieldType name="text_no_stem" class="solr.TextField" omitNorms="false">
          <analyzer>
              <tokenizer class="solr.StandardTokenizerFactory"/>
              <filter class="solr.StandardFilterFactory"/>
              <filter class="solr.LowerCaseFilterFactory"/>
          </analyzer>
       </fieldType>
    
       <!-- other fields definition -->
    
    </types>
    
    <fields>
    
       <!-- other fields definition -->
    
       <dynamicField name="*_nostem" type="text_no_stem" indexed="true" stored="true"/>
    
       <!-- other fields definition -->
    
    </fields>
    

    I'm using sunspot to integrate solr with Ruby on Rails. With this in the schema.xml I define my searchable block like this:

    searchable do
        text(:wants, as: :wants_nostem)
    end
    
    0 讨论(0)
  • 2020-12-01 14:42

    Use solr string field whcih will do an exact value search e.g

    <fieldType class="solr.StrField" name="string" omitNorms="true" sortMissingLast="true" />
    
    0 讨论(0)
  • I presume your field is a TextField, by default solr does a fuzzy search on this field. What you want is to set up your field as a string field and add no tokenizer then you'll get an exact match.

    You can even combine the exact search with a fuzzy search and use DisMax to boost the relative weights.

    Example (schema.xml) :

    <field name="name"             type="string" indexed="true" stored="false" required="true" />
    <field name="nameString"       type="string" indexed="true" stored="false" required="true" />
    <copyField source="name" dest="nameString"/>
    

    Example (solrconfig.xml) :

    <requestHandler name="accounts" class="solr.SearchHandler">
        <lst name="defaults">
          <str name="defType">dismax</str>
          <str name="qf">
            nameString^10.0 name^5.0 description^1.0
          </str>
          <str name="tie">0.1</str>
        </lst>
      </requestHandler>
    
    0 讨论(0)
  • 2020-12-01 14:59

    Use the quotes for exact match result :

    Example :

    core Name : core1 Key : namestring

    http://localhost:8983/solr/core1/select?q=namestring:"taxes"&wt=json&indent=true

    0 讨论(0)
  • 2020-12-01 15:01

    Turn off stemming.

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