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 的查询引擎)。
有没有办法在 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 的查询引擎)。