Elasticsearch 优先排名较短/相关性较低的标题

大炮莫耶

我正在使用 Elasticsearch 7.3 进行产品搜索。产品标题的格式不同,但我对此无能为力。

一些标题可能如下所示:

Ford Hub Bearing

其他人是这样的:

Hub bearing for a Chevrolet Z71 - model number 5528923-01

如果有人搜索“雪佛兰轮毂轴承”,“福特轮毂轴承”产品排名第一,雪佛兰零件排名第二。如果我从产品标题中删除所有额外的文本(型号 5528923-01),雪佛兰零件会根据需要排名第一。

不幸的是,我无法修复产品标题,因此当有人搜索Chevrolet Hub Bearing. 我只是将类型设置为nametotextstandard在我的索引中应用了分析器。这是我的查询代码:

{
    query:{

        bool: {
            must: [
                {
                    multi_match:{
                        fields: 
                            [
                               'name'
                             ],
                             query: "Chevrolet Hub Bearing"
                    }
                 }                  
            ]
        }

    }         
}
皮埃尔·马莱

Elasticsearch 在评分公式中使用字段长度和 BM25 算法。这就是为什么较长的文档即使匹配更多术语也会排在第二位的原因。

我建议您阅读有关 BM25 的精彩博文:how-shards-affect-relevance-scoring-in -elasticsearchthe-bm25-algorithm-and-its-variables

但是您可以调整 bm25 算法来避免这种行为。这是elasticsearch的bm25文档解释如何做的帖子

基于 TF/IDF 的相似性具有内置的 tf 规范化,并且应该对短字段(如名称)工作得更好。有关更多详细信息,请参阅 Okapi_BM25。这种相似性有以下选项:

k1 => 控制非线性项频归一化(饱和度)。默认值为 1.2。

b => 控制文档长度标准化 tf 值的程度。默认值为 0.75。

discount_overlaps => 确定计算范数时是否忽略重叠标记(位置增量为 0 的标记)。默认情况下这是真的,这意味着在计算规范时重叠标记不计算在内。

因此,您应该在索引设置中配置新的相似度,如下所示:

PUT <index>
{
  "settings": {
    "index": {
      "number_of_shards": 1
    },
    "similarity": {
      "my_bm25_without_length_normalization": {
        "type": "BM25",
        "b": 0
      }
    }
  },
  "mappings": {
    "doc": {
      "properties": {
        "name": {
          "type": "text",
          "similarity": "my_bm25_without_length_normalization"
        }
      }
    }
  }
}

然后 if 将停止惩罚更长的得分。其他字段的长度规范化将保留。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Elasticsearch-搜索词的相关性

elasticsearch查询中字段的不同相关性

使用 ElasticSearch 进行相关性评分和排序

基于字段值计数的ElasticSearch提升相关性

Elasticsearch 中的相关性得分提升 VS 排序

如何在Tyre elasticsearch中动态增强相关性(从数据库获取增值)

Elasticsearch应该在没有计算相关性的情况下进行查询(_score)

在Elasticsearch中如何计算嵌套文档的相关性分数(TF / IDF)?

ElasticSearch:给定文档和查询,相关性得分是多少?

Elasticsearch:具有过滤条件的查询是否会受到不在过滤条件中的记录的相关性的影响?

ElasticSearch:是否可以给出较低的模糊性评分?

Elasticsearch:精确匹配的排名如何?

ElasticSearch 5.5.0:查找相关文档

根据mysql中的相关性对结果进行排名

SQL用于简单相关性排名

如何在不影响性能,可扩展性的同时获得更好的相关性,以及如何避免Elasticsearch的分片效应

Elasticsearch EdgeNgram不首先返回较短的结果

给Elasticsearch查询增加模糊性

在Elasticsearch中从PostgreSQL进行分区排名

如何根据分数对 ElasticSearch 文档进行排名

Elasticsearch并行批量更新或索引优先

如何在elasticsearch中搜索相关单词?

将时间相关数据存储在ElasticSearch中

Elasticsearch 输出——如何删除 Java 调用的标题

组合对的相关性

配置相似性算法Elasticsearch

Springframework中Elasticsearch属性的相似性

validates_uniqueness_of elasticsearch持久性

Elasticsearch索引的更改相似性模型