Reputation: 278
I have a database with Vendor's information: name and address (address, city, zip and country fields). I need to search this database and return some vendors. On the search box, the user could type anything: name of the vendor, part of the address, city, zip,... And, if I can't find any results, I need to implement a google like "Did you mean" feature to give a suggestion to the user.
I thought about using Solr/Lucene to do it. I've installed Solr, exported the information I need using CSV file and created the indexes based on this file. Now I am able to get suggestions from a Solr field using solr.SpellCheckComponent. The thing is my suggestion is based in a single field and need it to get information from address, city, zip, country and name fields.
On solr config file I have something like this:
<searchComponent name="spellcheck" class="solr.SpellCheckComponent">
<str name="queryAnalyzerFieldType">textSpell</str>
<lst name="spellchecker">
<str name="name">default</str>
<str name="field">name</str>
<str name="spellcheckIndexDir">spellchecker</str>
</lst>
</searchComponent>
<requestHandler name="/spell" class="solr.SearchHandler" startup="lazy">
<lst name="defaults">
<str name="spellcheck.onlyMorePopular">false</str>
<str name="spellcheck.extendedResults">false</str>
<str name="spellcheck.count>1</str>
</lst>
<arr name="last-components">
<str>spellcheck</str>
</arr>
</requestHandler>
I can run queries like:
http://localhost:8983/solr/spell?q=some_company_name&spellcheck=true&spellcheck.collate=true&spellcheck.build=true
Does anyone know how to change my config file in order to have suggestions from multiple fields?
Thanks!!!
Upvotes: 3
Views: 5228
Reputation: 241
In order to configure Solr spellcheck to use words from several fields you should:
<field name="didYouMean" type="textSpell" indexed="true" multiValued="true"/>
.<copyField source="field1" dest="didYouMean"/>
<copyField source="field2" dest="didYouMean"/>
.<str name="field">didYouMean</str>
.For more and detailed information visit Solr spellcheck compound from several fields
Upvotes: 7
Reputation: 2549
You use copyfield for this in schema.xml.<copyField source="*" dest="contentSpell"/>
will copy all the fields to contentSpell.
Then change <str name="field">name</str>
to <str name="field">contentSpell</str>
en you will get suggestions from all fields.
Upvotes: 6