【问题标题】:ElasticSearch index scoreElasticSearch 索引得分
【发布时间】:2020-01-17 03:34:17
【问题描述】:

我注意到表格中的对象越多,按关键字搜索时的相关性就越大。所以例如有2个实体,服务和新闻,服务的标题是“剔除”,新闻的标题是“手去除”,我总共有1000个服务和50个新闻,如果我搜索这个词“removal” 那么服务的相关性是 1200 和新闻的 200 ,我该如何设置 ElasticSearchBundle 使得元素的数量在 intexation 中不起作用?

【问题讨论】:

    标签: php symfony elasticsearch configuration yaml


    【解决方案1】:

    在我看来,您不想考虑相关性计算,并且您可能希望一起禁用 tf-idf

    TF-IDF 会考虑单词的出现次数。

    查看Constant Score Query,这可能是您正在寻找的内容,您可以使用Filter Queries,以便不考虑相关性计算

    以下是如何使用它们来构建查询:

    POST <your_index_name>/_search
    { 
       "query":{ 
          "constant_score":{ 
             "filter":{ 
                "query_string":{ 
                   "query":"removal"
                }
             },
             "boost":1.2
          }
       }
    }
    

    请注意,当您执行上述查询时,所有文档的得分都会保持在 1.2

    请注意,如果您根本不关心分数,最好使用简单的过滤查询,它只会充当布尔查询。

    link 提到:

    过滤查询不计算相关性分数。加快 性能,Elasticsearch 自动缓存常用过滤器 查询。

    看到您还在这里增加了性能优势。

    如果这有帮助,请告诉我。

    【讨论】:

    • 嘿@Artem,上面的答案有用吗。你还有什么要找的吗?
    【解决方案2】:

    也许尝试“布尔相似度”而不是 tf/idf,这里有一篇很好的文章:https://saskia-vola.com/when-simple-is-better-the-boolean-similarity-module

    布尔模型的评分函数比 tf/idf 简单得多。一个术语是否出现在文档中。因此,您有 2 个可能的分数:每个学期分别为 1 和 0。如果您的三个术语出现在一个文档中,则该文档的得分为 3,这在某些情况下更容易处理。

    您只需将"similarity": "boolean" 添加到您的文本字段即可实现它:

    PUT test
    {
      "mappings": {
        "doc" : {
          "properties" : {
            "content" : {
              "type" : "text",
              "similarity" : "boolean"
            }
          }
        }
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-10
      • 1970-01-01
      • 2023-03-25
      • 2016-07-28
      • 2014-02-25
      • 2018-11-09
      • 2023-02-02
      • 1970-01-01
      相关资源
      最近更新 更多