elasticsearch Kibana查询字符串长度
有没有办法在Kibana中查询特定长度的值 例如,给定以下两个KV对:
elasticsearch Kibana查询字符串长度,
elasticsearch,kibana,
elasticsearch,Kibana,有没有办法在Kibana中查询特定长度的值 例如,给定以下两个KV对: key: "some" key: "something" 我想搜索key.length>5并仅检索“某物” 我看到的另一个选项是从logstash添加一个标记,但是我必须重新加载几百GB 您可以使用脚本查询在Kibana中执行此操作,有一个键长度大于5的脚本查询示例: { "query": { "filtered": { "f
key: "some"
key: "something"
我想搜索key.length>5并仅检索“某物”
我看到的另一个选项是从logstash添加一个标记,但是我必须重新加载几百GB 您可以使用脚本查询在Kibana中执行此操作,有一个键长度大于5的脚本查询示例:
{
"query": {
"filtered": {
"filter": {
"script": {
"script": "doc['key'].getValue().length() > 5"
}
}
}
}
}
您还需要在elasticsearch中启用脚本搜索,您需要将以下配置添加到elasticsearch.yml:
script.engine.groovy.inline.search: on
可以通过直接在Kibana中创建脚本化字段来实现这一点
- 在Kibana中,单击设置选项卡,然后单击索引模式
- 您应该看到两个选项卡“字段”和“脚本字段”
- 单击“脚本字段”选项卡。然后“添加脚本化字段”
- 在脚本字段中输入“名称”,然后输入以下内容:- 文档['key'].value.length>5
- 单击底部的“创建字段”。现在,您的脚本字段将被添加&可以从“发现”页面查看
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
}
}
}
您可以通过Lucene查询语法通过正则表达式查询来实现这一点。例如,
key:/.{6,}/
将只匹配其键字段的条目为6个字符或更多的记录
HT到a(也使用Lucene的查询引擎)。谢谢!文档给出了启用groovy搜索的原因:更新:作为安全预防措施,从版本4.0.0-RC1开始,Kibana脚本字段默认为Lucene表达式,而不是groovy。。。Lucene表达式只支持数字字段上的操作…我当时不知道,但在2019年是:
doc['key'].value.length()>5
。(length
是一个函数,需要括号)我是否应该用我在新脚本字段中添加的值替换键
?或者只保留doc['key'].value.length>5