我已经按照 solr wiki 文章的建议几乎到了这里:http://wiki.apache.org/solr/Suggester http://wiki.apache.org/solr/Suggester。我的 solrconfig.xml 中有以下 xml:
<searchComponent class="solr.SpellCheckComponent" name="suggest">
<lst name="spellchecker">
<str name="name">suggest</str>
<str name="classname">org.apache.solr.spelling.suggest.Suggester</str>
<str name="lookupImpl">org.apache.solr.spelling.suggest.tst.TSTLookup</str>
<str name="field">description</str>
<float name="threshold">0.05</float>
<str name="buildOnCommit">true</str>
</lst>
</searchComponent>
<requestHandler class="org.apache.solr.handler.component.SearchHandler" name="/suggest">
<lst name="defaults">
<str name="spellcheck">true</str>
<str name="spellcheck.dictionary">suggest</str>
<str name="spellcheck.onlyMorePopular">true</str>
<str name="spellcheck.count">5</str>
<str name="spellcheck.collate">true</str>
</lst>
<arr name="components">
<str>suggest</str>
</arr>
</requestHandler>
但是,当我运行以下查询(或类似的查询)时:
../suggest/?q=barbequ
我只得到以下结果 xml:
<response>
<lst name="responseHeader">
<int name="status">0</int>
<int name="QTime">78</int>
</lst>
<lst name="spellcheck">
<lst name="suggestions"/>
</lst>
</response>
正如您所看到的,这并不是很有帮助。有什么建议可以帮助解决这个问题吗?
我能想到的一些事情可能会导致这个问题:
源字段(“描述”)不正确 - 确保这确实是为拼写检查器播种术语的字段。甚至可能该字段是不同的情况(例如“描述”而不是“描述”)。
schema.xml 中的源字段设置不正确,或者正在由导致源字典无效的过滤器进行处理。我使用一个单独的字段来为字典播种,并使用<copyfield />
将相关其他字段复制到其中。
至少 5% 的记录中没有出现术语“烧烤”(您已通过包含来表明此要求<float name="threshold">0.05</float>
),因此不包含在查找字典中
在 SpellCheckComponent 中<str name="spellcheck.onlyMorePopular">true</str>
设置意味着只有会产生更多结果的术语才会作为建议返回。根据 Suggester 文档,它具有不同的功能(按权重对建议进行排序),但可能值得将其切换为 false 以查看它是否导致问题。
我的 schema.xml 的相关部分:
<schema>
<types>
<!-- Field type specifically for spell checking -->
<fieldType name="textSpell" class="solr.TextField" positionIncrementGap="100" omitNorms="true">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory" />
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
<filter class="solr.LowerCaseFilterFactory" />
<filter class="solr.StandardFilterFactory" />
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory" />
<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true" />
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
<filter class="solr.LowerCaseFilterFactory" />
<filter class="solr.StandardFilterFactory" />
</analyzer>
</fieldType>
</types>
<fields>
<field name="spell" type="textSpell" indexed="true" stored="false" multiValued="true" />
</fields>
<!-- Copy fields which are used to seed the spell checker -->
<copyField source="name" dest="spell" />
<copyField source="description" dest="spell" />
<schema>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)