【发布时间】:2019-02-01 03:04:56
【问题描述】:
我正在使用 Kibana 并且有一个看起来像这样的索引
GET index_name/
{
"index_name": {
"aliases": {},
"mappings": {
"json": {
"properties": {
"scores": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
}
}
我想获取每条记录的scores 数组的长度(即其中有多少text 元素),最终目标是过滤掉长度大于或等于的记录20. 到目前为止,我能够识别(突出显示)每个为“20”的记录,但似乎无法构建一个过滤器,然后我可以将其转换为布尔值(1 表示真)供以后使用/对满足条件的记录求和。单击“编辑查询 DSL”后,我将其放入发现面板的过滤器中:
{
"query": {
"match": {
"scores": {
"query": "20",
"type": "phrase"
}
}
}
}
编辑:文档中此字段的示例是:
scores:12, 12, 12, 20, 20, 20
在表格选项卡视图中,它旁边有一个t,表示text。此字段的长度因记录而异,从 1 到 20 多个项目不等。我也不知道如何通过查询(仅)获取该字段的长度,但我看到了一些其他答案,这些答案暗示了这样的事情(这对我来说会产生错误):
"filter" : {
"script" : {
"script" : "doc['score'].values.length > 10"
}
}
【问题讨论】:
-
是
scores字段和文本值数组吗?你能分享一个例子吗? -
@NishantSaini 为问题添加了一些上下文,谢谢。
-
对不起,但需要更多的说明,例如。你补充说,分数的长度是多少?是 6 点吗?
-
@NishantSaini 是不是更清楚了?
-
如果
score是text类型,那么你不能使用doc['score'].values.length。相反,如果有keyword类型的子字段,那么您可以使用doc['score.keyword'].values.length。
标签: elasticsearch logstash kibana elastic-stack