Kibana 查询字符串长度

Kibana querying for string length

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

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

key: "some"
key: "something"

我想搜索 key.length > 5 并仅检索 "something"。

我看到的另一个选项是从 logstash 添加一个标签,但是我将不得不重新加载几百 GB。

您可以在 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

您可以通过直接在 Kibana 中创建一个脚本化字段来实现。

  • 在 Kibana 中,单击“设置”选项卡,然后单击您的索引模式

  • 您应该看到 2 个选项卡“字段”和“脚本字段”。

  • 单击“脚本字段”选项卡。然后“添加脚本字段”。

  • 在脚本字段中输入“名称”并输入以下内容:-

    文档['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 到 similar question about Solr(它也使用 Lucene 的查询引擎)。