nepomucenobr
nepomucenobr

Reputation: 278

Solr/Lucene spellcheck suggestions based on multiple fields

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

Answers (2)

Ilanh
Ilanh

Reputation: 241

In order to configure Solr spellcheck to use words from several fields you should:

  1. Declare a new field. The New field declaration should use the properties type="textSpell" and multiValued="true". For example: <field name="didYouMean" type="textSpell" indexed="true" multiValued="true"/>.
  2. Copy all the fields, of which their words should be part of the spellcheck index, into the new field. For example: <copyField source="field1" dest="didYouMean"/> <copyField source="field2" dest="didYouMean"/>.
  3. Configure Solr to use the new field. Do it by set the field name to use your spellcheck field name. For example: <str name="field">didYouMean</str>.

For more and detailed information visit Solr spellcheck compound from several fields

Upvotes: 7

Okke Klein
Okke Klein

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

Related Questions