我想使用查询来比较多个字段。我有字段1到4。我想搜索字段1大于字段2并且下面的查询工作正常的数据;
{ "size": 0, "_source": [ "field1", "field2", "field3", "field4" ], "sort": [], "query": { "bool": { "filter": [], "must": { "script": { "script": { "inline": "doc['field1'].value > doc['field2'].value;", "lang": "painless" } } } } } }
现在,我想搜索哪个字段1大于字段2以及哪个字段3大于字段4的数据。根据Elastic Search:如何编写多语句脚本?和此链接,我只需要用分号分隔每个语句。所以应该是这样的:
{ "size": 0, "_source": [ "field1", "field2", "field3", "field4" ], "sort": [], "query": { "bool": { "filter": [], "must": { "script": { "script": { "inline": "doc['field1'].value > doc['field2'].value; doc['field3'].value > doc['field4'].value;", "lang": "painless" } } } } } }
但是该查询无效,并返回如下编译错误:
] .value> doc [‘field2’]。value; doc [‘field1’]。value> doc [‘field2’]。value; “,” lang“:”无痛“,” caused_by“:{” type“:” illegal_argument_exception“,” reason“:”不是声明。“}}}}]}}
您需要像这样结合两个条件:
doc['field1'].value > doc['field2'].value && doc['field3'].value > doc['field4'].value ^ | replace the semicolon by &&