【问题标题】:solr 8.4.1 search ignore duplicate phrasesolr 8.4.1 搜索忽略重复的短语
【发布时间】:2020-06-03 06:16:17
【问题描述】:

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

如果我正在搜索"pipes",请查看下面的结果。找到了 7 个结果,但名为 my pipes pipes 的 prod_id:297720 与 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


【解决方案1】:

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

<filter class="solr.RemoveDuplicatesTokenFilterFactory"/>

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

在下一页检查 RemoveDuplicatesTokenFilterFactory

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

【讨论】:

  • 我的猜测是,如果短语中的一个术语在文档中较早出现,这将破坏短语 - 即,如果最后一个 pipes,“管道 bar foo 管道”可能与 foo pipes 不匹配令牌被删除了?
  • 是的。这是可能的。可能是@abhay 可以尝试提供见解。
  • 嗨,我已经实现了相同的但它不起作用,我得到了相同的结果
  • 确保在更改定义后重新索引了内容。将debug=all 附加到您的查询还应该为您提供有关如何计算分数的信息。
  • 另外,您可以在分析部分查看索引和查询时实际发生的情况。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多