簡體   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