elasticsearch Kibana查询字符串长度,elasticsearch,kibana,elasticsearch,Kibana" /> elasticsearch Kibana查询字符串长度,elasticsearch,kibana,elasticsearch,Kibana" />

elasticsearch Kibana查询字符串长度

elasticsearch Kibana查询字符串长度,elasticsearch,kibana,elasticsearch,Kibana,有没有办法在Kibana中查询特定长度的值 例如,给定以下两个KV对: key: "some" key: "something" 我想搜索key.length>5并仅检索“某物” 我看到的另一个选项是从logstash添加一个标记,但是我必须重新加载几百GB 您可以使用脚本查询在Kibana中执行此操作,有一个键长度大于5的脚本查询示例: { "query": { "filtered": { "f

有没有办法在Kibana中查询特定长度的值

例如,给定以下两个KV对:

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