弹性搜索中的前缀自动生成字段
Prefix auto-generated field in elasticsearch
我有一份文件,里面有一些 uid
。我想创建一个索引为 not_analyzed
的字段,该字段自动生成为 uid
.
的 2 个字母前缀(或后缀)
有没有办法创建这样一个模板来自动计算该字段?
该用例用于显示 Kibana 上的向下采样(例如过滤器是前缀 ='00')统计信息(因此 unique count
聚合将花费更少的时间)。
我已经成功使用了它,但是我在将文档写入服务器之前在客户端创建了前缀字段。
索引前缀可以使用带有 keyword
标记器和 truncate
标记过滤器的自定义分析器构建来完成。下面是如何索引包含字段 test
的前 2 个字符的字段 test_prefix
的示例:
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"
}
}
}
}
}
我有一份文件,里面有一些 uid
。我想创建一个索引为 not_analyzed
的字段,该字段自动生成为 uid
.
有没有办法创建这样一个模板来自动计算该字段?
该用例用于显示 Kibana 上的向下采样(例如过滤器是前缀 ='00')统计信息(因此 unique count
聚合将花费更少的时间)。
我已经成功使用了它,但是我在将文档写入服务器之前在客户端创建了前缀字段。
索引前缀可以使用带有 keyword
标记器和 truncate
标记过滤器的自定义分析器构建来完成。下面是如何索引包含字段 test
的前 2 个字符的字段 test_prefix
的示例:
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"
}
}
}
}
}