gpt4 book ai didi

elasticsearch - 按嵌套数组的长度过滤

转载 作者:行者123 更新时间:2023-12-02 22:29:40 26 4
gpt4 key购买 nike

这是我的映射:

{"field_name": {
"dynamic": "strict",
"properties": {...},
"type": "nested"
}}

而且我试图只过滤至少有一个 field_name 的文档.

我试过:
{"query": {
"bool": {
"filter": [ { "script" : {
"script" : {
"inline": "doc['field_name'].length >= 1",
"lang": "painless"
} } ]
}
} }

但是elasticsearch 对我大喊大叫 No field found for [field_name] in mapping with types [type_name] .

我还尝试将前面的查询包装成 nested但也没有用:
{ "nested": {
"path": "field_name",
"query": {
"bool": {
"filter": [ {
"script": {
"script": {
"inline": "doc['field_name'].length >= 1",
"lang": "painless"
}
}
} ]
}
}
} }

这给出了与上面相同的错误。

有任何想法吗?

最佳答案

如果所有对象都有相同的字段,您可以使用exist来检查对象是否存在,然后使用sum计算计数,然后使用脚本分数选择您想要的条件。像下面的代码

{
"query": {
"function_score": {
"query": {
"nested": {
"path": "field_name",
"query": {
"exists": {
"field": "field_name.same_field"
}
},
"score_mode": "sum"
}
},
"functions": [
{
"script_score": {
"script": {
"source": "_score >= 1 ? 1 : 0"
}
}
}
],
"boost_mode": "replace"
}
},
"min_score": 1
}

关于elasticsearch - 按嵌套数组的长度过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46249073/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com