I have a schemaless solr core with inferred data types in managed-schema.xml
as:
<field name="Name" type="text_general" indexed="true" stored="true"/>
<field name="Type" type="text_general" indexed="true" stored="true"/>
I added on a new field:
<field name="didYouMean" type="text_general" indexed="true" multiValued="true" stored="true"/>
Which is a copyfield of:
<copyField source="Name" dest="didYouMean"/>
<copyField source="Type" dest="didYouMean"/>
In solrconfig.xml
, I have the search component as:
<searchComponent name="spellcheck" class="solr.SpellCheckComponent">
<lst name="spellchecker">
<str name="name">default</str>
<str name="field">didYouMean</str>
<str name="classname">solr.DirectSolrSpellChecker</str>
<float name="accuracy">0.5</float>
<int name="minPrefix">1</int>
<int name="minQueryLength">3</int>
</lst>
</searchComponent>
However, when I tried searching for an entry like Name:reffles
, solr gives this response:
{
"responseHeader":{
"status":0,
"QTime":1},
"response":{"numFound":0,"start":0,"numFoundExact":true,"docs":[]
},
"spellcheck":{
"suggestions":[],
"collations":[]}}
The correct response should have been "raffles" instead.
In contrast, I used another configuration for the search component by using the search field to be "Name" as shown below:
<searchComponent name="spellcheck" class="solr.SpellCheckComponent">
<lst name="spellchecker">
<str name="name">default</str>
<str name="field">Name</str>
<str name="classname">solr.DirectSolrSpellChecker</str>
<float name="accuracy">0.5</float>
<int name="minPrefix">1</int>
<int name="minQueryLength">3</int>
</lst>
</searchComponent>
I get the correct response:
{
"responseHeader":{
"status":0,
"QTime":35},
"command":"build",
"response":{"numFound":0,"start":0,"numFoundExact":true,"docs":[]
},
"spellcheck":{
"suggestions":[
"reffles",{
"numFound":1,
"startOffset":5,
"endOffset":12,
"suggestion":["raffles"]}],
"collations":[
"collation",{
"collationQuery":"Name:raffles",
"hits":1,
"misspellingsAndCorrections":[
"reffles","raffles"]}]}}
-----
The configurations were the same. On solr admin, only the spellcheck and spellcheck.build boxes are checked.
I have looked into other stackoverflow pages like Solr/Lucene spellcheck suggestions based on multiple fields https://sitecore.stackexchange.com/questions/2244/how-to-implement-did-you-mean-spell-checker-functionality-like-google-in-si
The solution is to do reindexing on the new schema.
- Delete all existing data from solr collection
- Reindex it again by posting the documents to solr
Useful sites: Delete all solr data, Solr Reindexing