我对多字短语的solr拼写检查建议有问题。查询红辣椒'
q=red+chillies&wt=xml&indent=true&spellcheck=true&spellcheck.extendedResults=true&spellcheck.collate=true
我得到了
<lst name="suggestions">
<lst name="chillies">
<int name="numFound">2</int>
<int name="startOffset">4</int>
<int name="endOffset">12</int>
<int name="origFreq">0</int>
<arr name="suggestion">
<lst><str name="word">chiller</str><int name="freq">4</int></lst>
<lst><str name="word">challis</str><int name="freq">2</int></lst>
</arr>
</lst>
<bool name="correctlySpelled">false</bool>
<str name="collation">red chiller</str>
</lst>
问题是,即使&#39;冷风机&#39;在指数中有4个结果,红色冷却器&#39;没有。因此,我们最终建议使用0结果的短语。
我该怎样做才能使拼写检查仅对整个短语起作用?我尝试在查询中使用KeywordTokenizerFactory:
<fieldType name="text_spell" 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.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
<filter class="solr.LowerCaseFilterFactory" />
</analyzer>
<analyzer type="query">
<tokenizer class="solr.KeywordTokenizerFactory" />
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
<filter class="solr.LowerCaseFilterFactory" />
</analyzer>
</fieldType>
我也尝试添加
<str name="sp.query.extendedResults">false</str>
内
<lst name="spellchecker">
在solrconfig.xml中。
但似乎两者都没有区别。
制作拼写检查的最佳方法是什么才能提供整个短语结果的整理?谢谢!
答案 0 :(得分:0)
这里的真正问题是,您需要指定spellcheck.collateParam.q.op=AND
,还必须指定spellcheck.collateParam.mm=100%
这些参数强制正确执行整理查询。
您可以在solr docs
上了解更多相关信息