使用 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 字段不太可能带来明显的加速,反而会增加存储索引所需的磁盘空间。