繁体   English   中英

elasticsearch tf-idf并忽略搜索中的字段长度范数

[英]elasticsearch tf-idf and ignoring field length norm in search

我想在elasticsearch中执行搜索,忽略tf-idf搜索中的字段规范。 您可以通过设置索引映射忽略字段规范来实现此目的。 然而,似乎这是通过更改索引来实现的,我只想修改搜索(我需要其他类型搜索的规范)。 完成此任务的最佳方法是什么? 我使用elasticsearch.js作为elasticsearch的接口。

您不能基于每个搜索禁用规范,但您可以使用多字段API添加禁用规范的其他字段。

PUT /my_index
{
  "mappings": {
    "my_type": {
      "properties": {
        "my_field": {
          "type": "string",
          "fields": {
            "no_norms": { 
              "type":  "string",
              "norms": {
                "enabled": false
              }
            }
          }
        }
      }
    }
  }
}

现在,你可以搜索my_field如果你需要规范和my_field.no_norms如果你不这样做。 您必须重新索引数据,以便新字段可用于所有文档,只需将其添加到映射中,就不会更改退出文档的任何内容。

所以这就是我最终使用的方法。 而不是使用tf-idf(当前弹性搜索默认值)我使用了BM25,这应该更好。 此外,它具有参数“b”,表示场长规范的重要性。 对于“b = 0”,忽略字段长度范数,而默认值为0.75。 可在此处找到BM25的讨论。 我的elasticsearch.yml里面有

index :
  similarity:
    default:
      type: BM25
      b: 0.0
      k1: 1.2
    norm_bm25:
      type: BM25
      b: 0.75
      k1: 1.2

对于那些使用elasticsearch javascript api的人,可以在索引创建期间定义自定义相似性

client.indices.create({
  index: "db",
  body: { 
        settings: { 
          number_of_shards: 1,
          similarity : "norm_bm25"
        } 
  }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM