gpt4 book ai didi

autocomplete - Solr仅对Suggester组件返回一个排序规则

转载 作者:行者123 更新时间:2023-12-04 13:28:27 25 4
gpt4 key购买 nike

我使用solr 3.6,并且我想将来自荐言者的排序规则用作自动搜索多词搜索的解决方案。不幸的是,即使存在针对每个单词的大量建议,对于多词搜索,建议者也只会返回一个排序规则。根据我的测试搜索和基础索引数据,我确定必须存在更多排序规则。

我的“建议者”配置有问题吗?

    <!--configuration -->
<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.fst.WFSTLookupFactory</str>
<str name="field">text</str> <!-- the indexed field to derive suggestions from -->
<!--<float name="threshold">0.0005</float> disabled for test-->
<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">200</str>
<str name="spellcheck.collate">true</str>
<str name="spellcheck.maxCollations">10</str>
</lst>
<arr name="components">
<str>suggest</str>
</arr>
</requestHandler>

q = bio + ber的示例响应:
<response>
<lst name="responseHeader">
<int name="status">0</int>
<int name="QTime">4</int>
</lst>
<lst name="spellcheck">
<lst name="suggestions">
<lst name="bio">
<int name="numFound">27</int>
<int name="startOffset">0</int>
<int name="endOffset">3</int>
<arr name="suggestion">
<str>bio</str>
<str>bio-estetica</str>
<str>bio-kosmetik</str>
...
</arr>
</lst>
<lst name="ber">
<int name="numFound">81</int>
<int name="startOffset">4</int>
<int name="endOffset">7</int>
<arr name="suggestion">
<str>beratung</str>
<str>bern</str>
...
</arr>
</lst>
<str name="collation">bio beratung</str>
</lst>
</lst>
</response>

最佳答案

我遇到了与您相同的问题,并且设法解决了这个问题。事实证明,要使多个排序规则正常工作,您需要了解几件事。

首先,必须在QueryComponent中“最建议”的componentsrequestHandler列表下指定solrconfig.xml。否则,您的requestHandler不知道如何查询索引,因此它无法弄清楚每个更正的查询有多少次匹配,因此您只会得到一个。如果您在查询中添加了spellcheck.collateExtendedResults=true,您将看到hits为0,这表明Solr无需费心针对索引检查更正后的查询。

他们通过一些不透明的错误消息对此进行了提示:
INFO: Could not find an instance of QueryComponent. Disabling collation verification against the index.
添加它的最简单方法是使用默认的QueryComponent,称为“查询”。因此,在上面发布的XML中,将“组件”部分更改为:

<arr name="components">
<str>suggest</str>
<str>query</str>
</arr>

其次,您需要将 spellcheck.maxCollations设置为大于1(duh),而不太直观的话,您需要将 spellcheck.maxCollationTries设置为较大的数字(例如1000)。如果将其中两个设置为默认值(均为0),那么Solr只会给您一个排序规则。另外,您需要将 spellcheck.count设置为大于1。

第三,您需要修改查询以包括要搜索的字段,并且这些术语必须用引号引起来,以确保正确的排序规则。因此,对于您的查询:
q=bio+ber
这确实应该是:
q=text:"bio+ber"
显然,在您的情况下,“文本”是默认字段,因此您不需要它。但就我而言,我使用的是非默认字段,因此必须指定它。否则,Solr会在“文本”字段中对匹配进行计数,并且所有结果都将具有0个匹配,因此排名将毫无用处。

因此,在我的情况下,查询如下所示:
q=my_field:"brain+c"
&spellcheck.count=5
&spellcheck.maxCollations=10
&spellcheck.maxCollationTries=1000
&spellcheck.collateExtendedResults=true

我的回应看起来像这样:

<response>
<lst name="responseHeader">
<int name="status">0</int>
<int name="QTime">4</int>
</lst>
<lst name="spellcheck">
<lst name="suggestions">
<lst name="brain">
<int name="numFound">1</int>
<int name="startOffset">15</int>
<int name="endOffset">20</int>
<arr name="suggestion">
<str>brain</str>
</arr>
</lst>
<lst name="c">
<int name="numFound">4</int>
<int name="startOffset">21</int>
<int name="endOffset">23</int>
<arr name="suggestion">
<str>cancer</str>
<str>cambrian</str>
<str>contusion</str>
<str>cells</str>
</arr>
</lst>
<lst name="collation">
<str name="collationQuery">my_field:"brain cancer"</str>
<int name="hits">2</int>
<lst name="misspellingsAndCorrections">
<str name="brain">brain</str>
<str name="c">cancer</str>
</lst>
</lst>
<lst name="collation">
<str name="collationQuery">my_field:"brain contusion"</str>
<int name="hits">1</int>
<lst name="misspellingsAndCorrections">
<str name="brain">brain</str>
<str name="c">contusion</str>
</lst>
</lst>
<lst name="collation">
<str name="collationQuery">my_field:"brain cells"</str>
<int name="hits">1</int>
<lst name="misspellingsAndCorrections">
<str name="brain">brain</str>
<str name="c">cells</str>
</lst>
</lst>
</lst>
</lst>
<result name="response" numFound="0" start="0"/>
</response>

成功!

关于autocomplete - Solr仅对Suggester组件返回一个排序规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10547438/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com