使用Solr 4.1处理拼写建议。
我们正确配置了它,Solr提供了术语以及整理建议。但是,我们注意到,如果我们再次搜索它,很多时候建议的单词/整理都没有任何结果。
例如,我们搜索了术语“ confort ”并且没有结果,有两个建议“舒适”和“转换”。第一个术语包含结果..但是第二个术语不会带来任何结果,而是建议另外两个术语,因此术语“转换”不提供以下建议的结果 - “连接”和“ 内容”。在这里,我们发现“连接”的结果很少,但“内容”没有任何提供以下建议。即“ connect “和”大陆“。在这里,我们还发现“ continent ”没有任何结果,并建议“ connect ”。
对于许多搜索字词甚至整理都会发生同样的情况。是什么造成这种情况我们一无所知?我们可以关闭那些没有结果的建议吗?
我的Solr配置
<requestHandler name="/spell" class="solr.SearchHandler" startup="lazy">
<lst name="defaults">
<str name="df">Name</str>
<str name="spellcheck.dictionary">default</str>
<str name="spellcheck.dictionary">wordbreak</str>
<str name="spellcheck">on</str>
<str name="spellcheck.extendedResults">true</str>
<str name="spellcheck.count">10</str>
<str name="spellcheck.alternativeTermCount">5</str>
<str name="spellcheck.maxResultsForSuggest">5</str>
<str name="spellcheck.collate">true</str>
<str name="spellcheck.collateExtendedResults">true</str>
<str name="spellcheck.maxCollationTries">10</str>
<str name="spellcheck.maxCollations">5</str>
</lst>
<arr name="last-components">
<str>spellcheck</str>
</arr>
</requestHandler>
<searchComponent name="spellcheck" class="solr.SpellCheckComponent">
<str name="queryAnalyzerFieldType">text</str>
<lst name="spellchecker">
<str name="name">default</str>
<str name="field">Name</str>
<str name="classname">solr.DirectSolrSpellChecker</str>
<str name="distanceMeasure">internal</str>
<float name="accuracy">0.5</float>
<int name="maxEdits">2</int>
<int name="minPrefix">1</int>
<int name="maxInspections">5</int>
<int name="minQueryLength">4</int>
<float name="maxQueryFrequency">0.01</float>
</lst>
<lst name="spellchecker">
<str name="name">wordbreak</str>
<str name="classname">solr.WordBreakSolrSpellChecker</str>
<str name="field">Name</str>
<str name="combineWords">true</str>
<str name="breakWords">false</str>
<int name="maxChanges">10</int>
</lst>
</searchComponent>
我的架构:
<fieldType name="text" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
<field name="Name" type="text" indexed="true" stored="true" required="false" />
我的查询:http://localhost:8983/solr/mycore/spell?q=confort&spellcheck=true&Collate=true&spellcheck.extendedResults=true
结果:
<response>
<lst name="responseHeader">
<int name="status">0</int>
<int name="QTime">16</int>
</lst>
<result name="response" numFound="0" start="0"/>
<lst name="spellcheck">
<lst name="suggestions">
<lst name="confort">
<int name="numFound">2</int>
<int name="startOffset">0</int>
<int name="endOffset">7</int>
<int name="origFreq">0</int>
<arr name="suggestion">
<lst>
<str name="word">comfort</str>
<int name="freq">6</int>
</lst>
<lst>
<str name="word">convert</str>
<int name="freq">2</int>
</lst>
</arr>
</lst>
<bool name="correctlySpelled">false</bool>
</lst></lst>
</response>
答案 0 :(得分:0)
您搜索的字词和拼写检查是否同时启用?他们是否接受同样的分析? 一个原因可能是字段不同,因此提供的字段建议不存在于正在搜索的字段中 此外,可能会对字段进行不同的分析,因此拼写建议和搜索不匹配。
答案 1 :(得分:0)
你在评论中说,你是从索引获得建议,但你的配置不是。
<str name="classname">solr.DirectSolrSpellChecker</str>
将上述内容更改为
<str name="classname">solr.IndexBasedSpellChecker</str>