首页 > 解决方案 > solr 8.4.1 搜索忽略重复的短语

问题描述

我们正在使用 Solr 8.4.1 从文档中搜索产品。我希望确切的短语排在首位,但我也希望如果同一短语在文档中重复多次,那么它应该只计算一次。现在,那些在文档中多次具有相同短语的关键字排在首位,因为它们获得了更高的分数。

鉴于我正在搜索,请查看下面的结果"pipes"。找到了 7 个结果,但prod_id:297720命名my pipes pipes的分数与 不同 prod_id:3064

根据我们的需要,两者应该具有相同的分数。我想忽略在文档中找到的重复短语。

我们正在使用相似性类<similarity class="solr.BM25SimilarityFactory"/>

下面给出的搜索字段架构为

<field name="product_related_kword" type="text_general" indexed="true" stored="true" />

结果是:

{
  "responseHeader":{
    "status":0,
    "QTime":222,
    "params":{
      "q":"product_related_kword:pipes",
      "fl":"product_name,score,product_related_kword,prod_id,member_classified_slno,member_id",
      "start":"0",
      "rows":"100",
      "debugQuery":"on"}},
  "response":{"numFound":7,"start":0,"maxScore":2.7593598,"docs":[
      {
        "prod_id":297720,
        "product_name":"my pipes pipes",
        "member_classified_slno":123457327,
        "member_id":"11111327",
        "product_related_kword":"my pipes pipes 00",
        "score":2.7593598},
      {
        "prod_id":3064,
        "product_name":"pipes",
        "member_classified_slno":123457560,
        "member_id":"11119579",
        "product_related_kword":"pipes 00",
        "score":2.5436506},
      {
        "prod_id":3064,
        "product_name":"pipes",
        "member_classified_slno":123457544,
        "member_id":"11113186",
        "product_related_kword":"pipes 00",
        "score":2.5436506},
      {
        "prod_id":3064,
        "product_name":"pipes",
        "member_classified_slno":123457546,
        "member_id":"11113636",
        "product_related_kword":"pipes 00",
        "score":2.5436506},
      {
        "prod_id":3064,
        "product_name":"pipes",
        "member_classified_slno":123457551,
        "member_id":"11119238",
        "product_related_kword":"pipes 00",
        "score":2.5436506},
      {
        "prod_id":3064,
        "product_name":"pipes",
        "member_classified_slno":123457553,
        "member_id":"785565531",
        "product_related_kword":"pipes 00",
        "score":2.5436506
       }
    ]
  },

标签: solr

解决方案


将以下过滤器添加到您的索引分析器。

<filter class="solr.RemoveDuplicatesTokenFilterFactory"/>

这将从流中删除重复的令牌。如果您有同义词,请在同义词过滤器之后添加它以获得更好的结果。

在下一页检查 RemoveDuplicatesTokenFilterFactory

https://lucene.apache.org/solr/guide/8_4/filter-descriptions.html


推荐阅读