我正在从主从配置迁移到Solr Cloud。我正在迁移到的Solr版本是4.4。我有2个碎片,每个碎片有1个副本。我正面临着分布式拼写建议的一个问题。我在请求处理程序中打开了拼写组件。我们的想法是将建议(如果有的话)作为查询响应的一部分。
<str name="spellcheck">on</str>
<str name="spellcheck.collate">true</str>
<str name="spellcheck.onlyMorePopular">false</str>
<str name="spellcheck.extendedResults">false</str>
<str name="spellcheck.count">1</str>
<str name="spellcheck.dictionary">default</str>
</lst>
<!-- append spellchecking to our list of components -->
<arr name="last-components">
<str>spellcheck</str>
</arr>
拼写检查组件也非常标准。
<searchComponent name="spellcheck" class="solr.SpellCheckComponent">
<str name="queryAnalyzerFieldType">spell</str>
<!-- a spellchecker built from a field of the main index -->
<lst name="spellchecker">
<str name="name">default</str>
<str name="field">text</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>
<!-- uncomment this to require suggestions to occur in 1% of the documents
<float name="thresholdTokenFrequency">.01</float>
-->
</lst>
<!-- a spellchecker that can break or combine words. See "/spell" handler below for usage -->
<lst name="spellchecker">
<str name="name">wordbreak</str>
<str name="classname">solr.WordBreakSolrSpellChecker</str>
<str name="field">text</str>
<str name="combineWords">true</str>
<str name="breakWords">true</str>
<int name="maxChanges">10</int>
</lst>
</searchComponent>
我在两个分片中都运行了 spellcheck.build = true 。现在,如果我运行查询,
http://testhost.com:8983/solr/browse?q=dellll
回复不会返回任何建议。但是,如果我明确添加 distrib = false ,我会收到建议
http://testhost.com:8983/solr/browse?q=dellll&distrib=false
由于我的查询需要分发,这种方法失败了,我不想单独查询拼写检查。
任何关于此的指针都将受到赞赏。
答案 0 :(得分:1)
我找到了解决方案。作为其他人研究解决方案的参考,以下是您需要做的事情。
要使拼写建议在分布式Solr环境中工作,您需要在查询中添加 shards.qt 。它应该设置为您正在使用的请求处理程序的名称。例如,如果您正在使用/ select请求处理程序,那么您需要使用/ spell请求处理程序。查询看起来像:
http://testhost.com:8983/solr/select?q=dellll&shards.qt=/spell
对于自定义请求处理程序,qt应与请求处理程序相同。
http://testhost.com:8983/solr/customhandler?q=dellll&shards.qt=/customhandler