有没有办法在Kibana中查询一定长度的值?例如,给定以下两个KV对:
key: "some" key: "something"
字符串我想搜索key.length> 5并只检索“something”。我看到的另一个选择是从logstash添加一个标记,但这样我就必须重新加载几百GB。
nlejzf6q1#
您可以在Kibana. Script Query in Kibana中使用脚本查询来完成,这里有一个key长度大于5的脚本查询示例:
{ "query": { "filtered": { "filter": { "script": { "script": "doc['key'].getValue().length() > 5" } } } } }
字符串另外,您还需要在elasticsearch中开启脚本搜索,您需要在elasticsearch.yml中添加以下配置:
script.engine.groovy.inline.search: on
型
9ceoxa922#
您可以通过Lucene查询语法使用正则表达式查询来实现这一点。例如,key:/.{6,}/将仅匹配关键字字段的条目为6个字符或更多的记录。HT到similar question about Solr(也使用Lucene的查询引擎)。
key:/.{6,}/
5m1hhzi43#
如果你可以重新索引你的索引,或者你只是创建它,你可以创建一个自定义的tokenizer如下:
PUT test_index { "settings": { "analysis": { "analyzer": { "character_analyzer": { "type": "custom", "tokenizer": "character_tokenizer" } }, "tokenizer": { "character_tokenizer": { "type": "nGram", "min_gram": 1, "max_gram": 1 } } } }, "mappings": { "person": { "properties": { "name": { "type": "text", "fields": { "keyword": { "type": "keyword" }, "words_count": { "type": "token_count", "analyzer": "standard" }, "length": { "type": "token_count", "analyzer": "character_analyzer" } } } } } } } PUT test_index/person/1 { "name": "John Smith" } PUT test_index/person/2 { "name": "Rachel Alice Williams" } GET test_index/person/_search { "query": { "term": { "name.length": 10 } } }
字符串
9rbhqvlz4#
您可以通过直接在Kibana中创建脚本字段来完成此操作。
文档名“key”].value.length > 5
4条答案
按热度按时间nlejzf6q1#
您可以在Kibana. Script Query in Kibana中使用脚本查询来完成,这里有一个key长度大于5的脚本查询示例:
字符串
另外,您还需要在elasticsearch中开启脚本搜索,您需要在elasticsearch.yml中添加以下配置:
型
9ceoxa922#
您可以通过Lucene查询语法使用正则表达式查询来实现这一点。例如,
key:/.{6,}/
将仅匹配关键字字段的条目为6个字符或更多的记录。HT到similar question about Solr(也使用Lucene的查询引擎)。
5m1hhzi43#
如果你可以重新索引你的索引,或者你只是创建它,你可以创建一个自定义的tokenizer如下:
字符串
9rbhqvlz4#
您可以通过直接在Kibana中创建脚本字段来完成此操作。
文档名“key”].value.length > 5