可以针对其所有元素都必须满足某些条件的数组字段进行 ElasticSearch 查询
is possible to make a ElasticSearch query against a array field that all its elements must satisfy some condition
我正在使用 ElasticSearch,并且有一个数字数组字段,如下所示。
{
income: [200, 300, 400]
}
我需要编写一个查询来查找其收入的所有元素都大于某个值的文档。
例如,如果条件是
> 250
那么上面的文档应该不会被命中,因为200小于250。
但如果条件是
> 150
那么文件应该被归还。
您可以通过遍历数组字段并检查所需条件的脚本查询来执行此操作。
在上述情况下,以下是 queryDsl
GET testample/_search
{
"query": {
"script": {
"script": {
"source": " boolean test = false; for (inc in doc['income']) { if(params.income<=inc) { test=true; } else { test=false; break;} } return test;",
"params": {
"income": 150
}
}
}
}
}
基本上您可以在脚本部分执行任何代码。上面的查询所做的是,它将用户输入作为参数,然后检查它是否小于数组中的所有元素,如果是,则文档评估为真,因此作为查询响应返回。
我正在使用 ElasticSearch,并且有一个数字数组字段,如下所示。
{
income: [200, 300, 400]
}
我需要编写一个查询来查找其收入的所有元素都大于某个值的文档。 例如,如果条件是
> 250
那么上面的文档应该不会被命中,因为200小于250。 但如果条件是
> 150
那么文件应该被归还。
您可以通过遍历数组字段并检查所需条件的脚本查询来执行此操作。 在上述情况下,以下是 queryDsl
GET testample/_search
{
"query": {
"script": {
"script": {
"source": " boolean test = false; for (inc in doc['income']) { if(params.income<=inc) { test=true; } else { test=false; break;} } return test;",
"params": {
"income": 150
}
}
}
}
}
基本上您可以在脚本部分执行任何代码。上面的查询所做的是,它将用户输入作为参数,然后检查它是否小于数组中的所有元素,如果是,则文档评估为真,因此作为查询响应返回。