elasticsearch - 如何在ELK堆栈中使用Elasticsearch查询获取数组的长度?

标签 elasticsearch logstash kibana elastic-stack

我正在使用Kibana,并且索引看起来像这样

GET index_name/

{
  "index_name": {
    "aliases": {},
    "mappings": {
      "json": {
        "properties": {
          "scores": {
            "type": "text",
            "fields": {
              "keyword": {
                "type": "keyword",
                "ignore_above": 256
              }
            }
          }
        }
      }
    }

我想获取每个记录的scores数组的长度(即,其中包含多少个text元素),最终目的是过滤出长度大于或等于20的记录。到目前为止,能够识别(突出显示)每个为“20”的记录,但似乎无法构建一个过滤器,然后我可以将其转换为 bool(boolean) 值(真为1),供以后使用/求和满足条件的记录。单击“编辑查询DSL”后,将其放入“发现面板”的过滤器中:
{
  "query": {
    "match": {
      "scores": {
        "query": "20",
        "type": "phrase"
      }
    }
  }
}

编辑:在文档中此字段的示例是:
scores:12, 12, 12, 20, 20, 20
在表格标签 View 中,它旁边有一个t,表示text。记录的长度从1到20多个项目不等。我也不知道如何通过查询返回此字段的长度(仅),但是我看到了其他一些答案,这些答案建议如下(对我来说会产生错误):
"filter" : {
    "script" : {
        "script" : "doc['score'].values.length > 10"
    }
}

最佳答案

有两种选择

这是查找任意大小的项目数(通过,分隔)的位置。

{
  "query": {
    "bool": {
      "filter": {
        "script": {
          "script": {
            "source":"/, /.split(doc['score.keyword'].value).length > 20"
          }
        }
      }
    }
  }
}

注意:对于上述解决方案,需要在script.painless.regex.enabled: true中设置elasticsearch.yml

如果所有分数都具有特定大小(即,只有两位数),则字符串长度(如您所尝试的)将起作用:
{
  "query": {
    "bool": {
      "filter": {
        "script": {
          "script": {
            "source":"doc['scores.keyword'].value.length() > 78"
          }
        }
      }
    }
  }
}

我选择78,因为每个项目(假设2位数字)是2位数字+ , == 4,您想看到大于20的数字,即19 * 4 + 2

如果您经常担心此分数数组的大小,则可能应该这样存储它。您可以使用split processor在摄取管道中进行处理以实现此目的。

关于elasticsearch - 如何在ELK堆栈中使用Elasticsearch查询获取数组的长度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54472297/

相关文章:

php - elasticsearch:搜索词的一部分

java - Logback 与logstash-logback-encoder 不工作

elasticsearch - 使用logstash的动态elasticsearch index_type

elasticsearch - 使用 quarkuslogging-gelf 扩展和 ELK 堆栈时出现索引错误

python - 通过 save_objects api 导出导入 Kibana [7.4] 对象

elasticsearch - 有没有办法像其他编程语言一样用脚本迭代弹性数组文档

elasticsearch - 设置 ElasticSearch 以仅在每个客户的数据中进行搜索的最佳方式

jdbc - MYSQL 的 Logstash Jdbc 输入插件

python - 如何通过logstash将字段添加到kibana

c# - Missing()方法DateHistogramAggregationDescriptor在特定条件下似乎不起作用