Ruth
Ruth

Reputation: 5816

Solr exact word search

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', 'taxation' etc.

Any help or tips would be appreciated.

Upvotes: 24

Views: 41045

Answers (6)

Thorfinn
Thorfinn

Reputation: 43

For using double quotes (") like Priya suggested, you also need to escape every single backslash with another backslash.

Upvotes: 0

Priya M
Priya M

Reputation: 51

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

Upvotes: 4

Vijay Tiwary
Vijay Tiwary

Reputation: 151

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

<fieldType class="solr.StrField" name="string" omitNorms="true" sortMissingLast="true" />

Upvotes: 2

wawka
wawka

Reputation: 5174

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

Upvotes: 7

developresource
developresource

Reputation: 422

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>

Upvotes: 26

Hank Gay
Hank Gay

Reputation: 72029

Turn off stemming.

Upvotes: 4

Related Questions