在查询中按单词顺序对文档进行排序

时间:2019-10-21 19:24:47

标签: solr

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

例如,如果我输入查询两个单词milkchocolate,我想要包含这些单词的相同顺序的增强文档。

在我的查询中: http://localhost:8983/solr/product/select?defType=edismax&fl=*%2C%20score&q.op=AND&q=chocolate+milk&qf=title_token%5E10

您会看到我有查询chocolate milk,该查询的结果是:

{
  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
}

您可以看到我的前2个文档具有相同的score,但第一个是匹配单词顺序与查询中的单词不同的文档。您能告诉我如何增强匹配查询词顺序的文档吗?谢谢。

我的标题令牌字段具有以下配置:

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

1 个答案:

答案 0 :(得分:0)

您可以在edismax查询解析器中使用pf2pf3参数:

  

pf2参数

     

一个多值字段列表,具有基于单词带状对的可选权重。

     

pf3参数

     

一个多值字段列表,其具有可选的权重,基于单词带状结构的三元组。与pf相似,除了它不是在输入中所有单词的每个字段中构建一个短语,而是在每个单词带状结构的三元组中为每个字段构建一组短语。

带状疱疹是两个单词的组合,即“巧克力牛奶”。您还希望添加一个停用词过滤器,以便从令牌流中删除of

pf2=title^5

..将对查询中的单词彼此依次出现的单词加5倍。

您还可以添加一个显式的带状疱疹过滤器,该过滤器在编制索引时将标记集组合在一起,然后对该字段进行增强处理。