elasticsearch elasticsearch中的前缀自动生成字段,elasticsearch,kibana,elasticsearch,Kibana" /> elasticsearch elasticsearch中的前缀自动生成字段,elasticsearch,kibana,elasticsearch,Kibana" />

elasticsearch elasticsearch中的前缀自动生成字段

elasticsearch elasticsearch中的前缀自动生成字段,elasticsearch,kibana,elasticsearch,Kibana,我有一个带有一些uid的文档。我想创建一个索引为not_analysis的字段,该字段自动生成为uid的两个字母前缀(或后缀) 有没有办法创建这样一个模板来自动计算该字段 该用例用于显示Kibana上的向下采样(例如,过滤器是prefix='00')统计信息(因此唯一计数聚合将花费更少的时间) 我已经成功地使用了它,但在将文档写入服务器之前,我在客户端上创建了前缀字段。索引前缀可以使用自定义分析器生成,带有关键字标记器和截断标记过滤器。下面是一个示例,说明如何索引包含字段test前两个字符的字段

我有一个带有一些
uid
的文档。我想创建一个索引为
not_analysis
的字段,该字段自动生成为
uid
的两个字母前缀(或后缀)

有没有办法创建这样一个模板来自动计算该字段

该用例用于显示Kibana上的向下采样(例如,过滤器是prefix='00')统计信息(因此
唯一计数
聚合将花费更少的时间)


我已经成功地使用了它,但在将文档写入服务器之前,我在客户端上创建了前缀字段。

索引前缀可以使用自定义分析器生成,带有
关键字
标记器和
截断
标记过滤器。下面是一个示例,说明如何索引包含字段
test
前两个字符的字段
test\u前缀

curl -XPUT localhost:9200/test-idx -d '{
    "settings": {
        "index": {
            "number_of_shards": 1,
            "number_of_replicas": 0
        },
        "analysis": {
            "analyzer": {
                "prefix": {
                    "tokenizer": "keyword",
                    "filter": "prefix"
                }
            },
            "filter": {
                "prefix": {
                    "type": "truncate",
                    "length": 2
                }
            }
        }
    },
    "mappings": {
        "doc": {
            "properties": {
                "test": {
                    "type": "string",
                    "copy_to": "test_prefix"
                },
                "test_prefix": {
                    "type": "string",
                    "analyzer": "prefix"
                }

            }
        }
    }
}'

我使用了edgeNGram标记器,似乎它提供了相同的结果

{
  "settings": {
    "analysis": {
      "analyzer": {
        "edge_ngram_analyzer": {
          "tokenizer": "edge_ngram_tokenizer"
        }
      },
      "tokenizer": {
        "edge_ngram_tokenizer": {
          "type": "edgeNGram",
          "min_gram": "2",
          "max_gram": "2"
        }
      }
    }
  }
}

如果您对其他用户的帖子有评论,请将其作为评论而不是答案发布。你需要一些投票,然后才能发表评论,但与此同时,不要试图绕过系统。我已经从你的回答中删除了这个评论。谢谢@imotov。我已经实现了Nir的答案。您的方法在性能方面更可取吗?我怀疑您是否会看到这两者之间的性能差异。