Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Autocomplete Solr只为Suggester组件返回一个排序规则_Autocomplete_Solr_Collation_Autosuggest - Fatal编程技术网

Autocomplete Solr只为Suggester组件返回一个排序规则

Autocomplete Solr只为Suggester组件返回一个排序规则,autocomplete,solr,collation,autosuggest,Autocomplete,Solr,Collation,Autosuggest,我使用Solr3.6,我想使用suggester的排序规则作为多术语搜索的自动完成解决方案。不幸的是,对于多术语搜索,建议者只返回一个排序规则,即使每个术语都有很多建议。根据我的测试搜索和基础索引数据,我确信必须存在更多的排序规则 我的Suggester配置有问题吗 <!--configuration --> <searchComponent class="solr.SpellCheckComponent" name="suggest"> <lst name

我使用Solr3.6,我想使用suggester的排序规则作为多术语搜索的自动完成解决方案。不幸的是,对于多术语搜索,建议者只返回一个排序规则,即使每个术语都有很多建议。根据我的测试搜索和基础索引数据,我确信必须存在更多的排序规则

我的Suggester配置有问题吗

    <!--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> 

建议
org.apache.solr.spelling.Suggester
org.apache.solr.spelling.suggest.fst.wfstlookupffactory
正文
真的
真的
建议
真的
200
真的
10
建议
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>

0
4.
27
0
3.
生物
生物estetica
bio kosmetik
...
81
4.
7.
伯朗
伯尔尼
...
比奥伯朗

我和你有同样的问题,我设法解决了。事实证明,要使多个排序规则正常工作,您需要知道几件事

首先,必须在
solrconfig.xml
中的“建议”
requestHandler
components
列表下指定
QueryComponent
。否则,您的
requestHandler
不知道如何查询索引,因此它无法计算每个已更正查询的命中率,因此您只能得到一个。如果您在查询中添加了
spellcheck.CollatedExtendedResults=true
,您将看到
命中率为0,这表明Solr没有费心根据索引检查正确的查询

他们用一条有点不透明的错误消息来暗示这一点:

INFO:找不到QueryComponent的实例。禁用索引的排序规则验证。

添加它的最简单方法是使用默认的
QueryComponent
,称为“query”。因此,在上面发布的XML中,您可以将“components”部分更改为:


建议
查询
其次,您需要将
拼写检查.maxCollations
设置为大于1(duh),而不太直观的是,您需要将
拼写检查.maxCollations
设置为一些大数字(例如1000)。如果其中一个设置为默认值(均为0),则Solr将只提供一个排序规则。此外,您需要将
拼写检查.count
设置为大于1

第三,您需要修改查询以包含要搜索的字段,并且术语必须用引号括起来,以确保正确的排序。因此,对于您的查询:

q=bio+ber

这确实应该是:

q=text:“bio+ber”

显然,在您的情况下,“text”是默认字段,因此您不需要它。但在我的例子中,我使用了一个非默认字段,所以我必须指定它。否则,Solr将根据“文本”字段计算点击数,所有结果都将有0次点击,因此排名将毫无用处

在我的例子中,查询如下所示:

q=my_field:"brain+c"
&spellcheck.count=5
&spellcheck.maxCollations=10
&spellcheck.maxCollationTries=1000
&spellcheck.collateExtendedResults=true
我的回答是这样的:

q=my_field:"brain+c"
&spellcheck.count=5
&spellcheck.maxCollations=10
&spellcheck.maxCollationTries=1000
&spellcheck.collateExtendedResults=true

0
4.
1.
15
20
脑
4.
21
23
巨蟹座
寒武纪
挫伤
细胞
我的领域:“脑癌”
2.
脑
巨蟹座
我的领域:“脑挫伤”
1.
脑
挫伤
我的领域:“脑细胞”
1.
脑
细胞
成功

也有同样的问题

这是Solr 3.6.1的一个bug(不确定以前的版本)。请检查:

实际上,这一评论说明:

一种可能的解决方法是指定spellcheck.MaxCollationContries等于所需的排序规则数,但这也将迫使Solr根据搜索索引检查这些排序规则。因此,请小心将此属性设置为一个大数字。有关此参数的详细信息,请参见:

Bug尚未关闭,但已提交修补程序

我还检查了Solr4.0.0-BETA版的代码,修复程序已经存在


祝你好运

我自己也遇到了这个问题,只是使用了基本的Solr玩具应用程序(start.jar)。我尝试了所有可能的拼写检查参数组合,包括spellcheck.maxCollations,但似乎只能得到一个排序规则。如果您有任何见解,我们将不胜感激。
@nlawson
:您能帮助解决这些错误吗:[&[