使用 murmur3 字段

编辑

murmur3 通常在多字段中使用,以便将原始值及其哈希值都存储在索引中。

PUT my-index-000001
{
  "mappings": {
    "properties": {
      "my_field": {
        "type": "keyword",
        "fields": {
          "hash": {
            "type": "murmur3"
          }
        }
      }
    }
  }
}

这样的映射允许引用 my_field.hash 来获取 my_field 字段值的哈希值。这仅在运行 cardinality 聚合时有用。

# Example documents
PUT my-index-000001/_doc/1
{
  "my_field": "This is a document"
}

PUT my-index-000001/_doc/2
{
  "my_field": "This is another document"
}

GET my-index-000001/_search
{
  "aggs": {
    "my_field_cardinality": {
      "cardinality": {
        "field": "my_field.hash" 
      }
    }
  }
}

计算 my_field.hash 字段上的唯一值

直接在 my_field 字段上运行 cardinality 聚合会产生相同的结果,但是如果字段具有高基数,则使用 my_field.hash 代替可能会加快速度。 另一方面,不建议在数字字段和几乎不是唯一的字符串字段上使用 murmur3 字段,因为使用 murmur3 字段不太可能带来显著的加速,同时还会增加存储索引所需的磁盘空间量。