Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.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
Solr 按查询中的单词顺序对文档排序_Solr - Fatal编程技术网

Solr 按查询中的单词顺序对文档排序

Solr 按查询中的单词顺序对文档排序,solr,Solr,您能告诉我如何按照查询中单词的顺序对Solr中的文档结果进行排序吗 例如,如果我输入以查询两个单词milk和chocolate,我需要按相同顺序包含这些单词的增强文档 在我的问题中: http://localhost:8983/solr/product/select?defType=edismax&fl=*%2C%20score&q.op=和&q=巧克力+牛奶&qf=头衔\u代币%5E10 您可以看到我有一个查询巧克力牛奶,该查询的结果是: { id: 3346664, title: "

您能告诉我如何按照查询中单词的顺序对Solr中的文档结果进行排序吗

例如,如果我输入以查询两个单词
milk
chocolate
,我需要按相同顺序包含这些单词的增强文档

在我的问题中:
http://localhost:8983/solr/product/select?defType=edismax&fl=*%2C%20score&q.op=和&q=巧克力+牛奶&qf=头衔\u代币%5E10

您可以看到我有一个查询
巧克力牛奶
,该查询的结果是:

{
  id: 3346664,
  title: "Milk with chocolate",
  _version_: 1648030883251224600,
  score: 79.53341
},
{
  id: 8754567,
  title: "Chocolate of Milk",
  _version_: 1648030883402219500,
  score: 79.53341
},
{
  id: 345428,
  title: "Delicious Thins Milk Chocolate",
  _version_: 1648030884582916000,
  score: 74.86635
}
正如您所看到的,我的前两个文档具有相同的
分数
,但第一个文档中匹配的单词顺序与我的查询中的单词顺序不同。您能告诉我如何增强符合查询词顺序的文档吗?多谢各位

“我的标题标记”字段具有以下配置:

<fieldType name="text_token" class="solr.TextField">
    <analyzer type="index">
        <tokenizer class="solr.WhitespaceTokenizerFactory"/>
        <filter class="solr.WordDelimiterFilterFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.ASCIIFoldingFilterFactory" preserveOriginal="true"/>
        <filter class="solr.TrimFilterFactory"/>
        <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
    </analyzer>
    <analyzer type="query">
        <tokenizer class="solr.WhitespaceTokenizerFactory"/>
        <filter class="solr.WordDelimiterFilterFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.ASCIIFoldingFilterFactory" preserveOriginal="true"/>
        <filter class="solr.TrimFilterFactory"/>
        <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
    </analyzer>
</fieldType>

您可以将
pf2
pf3
参数用于eDiscoveryMax查询解析器:

pf2参数

具有可选权重的字段的多值列表,基于成对的字板

pf3参数

具有可选权重的字段的多值列表,基于三个字带状图。与pf类似,不同的是,它不是用输入中的所有单词为每个字段构建一个短语,而是用每个三元组的单词板为每个字段构建一组短语

木瓦是两个词的组合,即“巧克力牛奶”。您还需要添加stopwordfilter,以便从令牌流中删除

pf2=title^5
。。将对那些查询中的单词出现在后面的单词应用5倍的提升


您还可以添加一个显式的shingle筛选器,在索引时将标记集组合在一起,然后对该字段应用增强功能。

这就是我的查询现在的样子:/solr/core\u name/select?defType=edismax&fl=*%2Cscore&pf2=title%5E30&q=chocolate%20milk&qf=title\u token&stopwords=true我将此title设置到pf2字段^30,我还尝试将shingle过滤器添加到索引分析器中,并将next添加到查询分析器中,但仍然得到相同的结果。标题为“牛奶巧克力”的文档仍然不是第一个使用
debug=all
设置查看分数是如何受到影响的。例如,在索引以删除单词之间的
of
时,需要显示stopfilter。在对索引分析器进行任何更改后,还需要重新编制索引。