Elasticsearch查询:筛选availableQuantity大于quantityPerUnitOfMeasure的文档
Elasticsearch 查询:筛选availableQuantity大于自身quantityPerUnitOfMeasure的文档
我需要编写Elasticsearch查询,仅返回availableQuantity字段值大于同文档中quantityPerUnitOfMeasure字段值的文档。
文档结构示例:
{ "id": "1", "quantityPerUnitOfMeasure": 16, "availableQuantity": 12 }
测试数据集:
[ { "id": "1", "quantityPerUnitOfMeasure": 16, "availableQuantity": 12 }, { "id": "2", "quantityPerUnitOfMeasure": 4, "availableQuantity": 20 }, { "id": "3", "quantityPerUnitOfMeasure": 40, "availableQuantity": 50 } ]
预期结果:返回id为"2"和"3"的文档,排除id为"1"的文档。
解决方案:使用脚本查询实现字段间比较
可以通过Painless脚本查询直接在文档内部比较两个数值字段,具体语句如下:
{ "query": { "bool": { "filter": { "script": { "script": { "source": "doc['availableQuantity'].value > doc['quantityPerUnitOfMeasure'].value", "lang": "painless" } } } } } }
说明:
- 用
bool.filter包裹脚本查询,仅做过滤操作不影响文档评分 - 通过
doc[字段名].value获取字段的数值类型值,直接进行大于比较 - 需确保
availableQuantity和quantityPerUnitOfMeasure均为数值类型(如integer、long),否则脚本会执行失败
内容的提问来源于stack exchange,提问作者Joe Longstreet
相关产品推荐
相关产品推荐

