我是ES的新手,但我正在尝试创建一个脚本,可以查询数组以包含一些匹配项,但也可以根据总数组大小进行过滤。
示例数据:
"_source": {
"id": 5,
"title": "Chicken & vegetable broth, soda farls & chicken liver toasts ",
"ingredients": [
"1 organic or free-range chicken",
"5 large onions",
"100g butter, for frying"
]
}
以下查询将匹配上述记录但不会返回它,因为它的成分少于5个。
{
"query": {
"function_score": {
"query": {
"terms": {
"ingredients": ["beef", "bacon"]
}
},
"functions": [{
"script_score": {
"script": "ingredients-amount",
"params": {
"my_modifier": 5
}
}
}]
}
}
}
我认为ingredients-amount.mvel
很简单:
doc['ingredients'].values.length > my_modifier
感谢您的帮助
答案 0 :(得分:1)
索引数组的长度,这样你就可以做一个简单的range
- 过滤器。
如果您使用脚本,则会将整个字段加载到内存中,您可能不想这样做。
答案 1 :(得分:0)
如果你想以脚本的方式做,那么表达式将是:
doc['ingredients'].values.size() > my_modifier
但是使用doc确实不是最好的,性能方面的,所以你可能会更好地将成分列表的长度编入索引,如Alex建议的那样。