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.
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> 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 Turn off stemming.
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