我想使用查询来比较多个字段。我有字段 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:如何编写多语句脚本? https://stackoverflow.com/a/33480475/2671470 and 这个链接 https://discuss.elastic.co/t/is-there-any-way-to-update-multiple-fields-by-update-by-query/70644/2我只需要用分号分隔每个语句。所以它应该是这样的:
{
"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"
}
}
}
}
}
}
但该查询不起作用并返回如下编译错误:
{"root_cause":[{"type":"script_exception","reason":"编译
错误","script_stack":["doc['field1'].value > doc[' ...","^----
这里"],"script":"doc['field1'].value > doc['field2'].value;
doc['field1'].value > doc['field2'].value;
","lang":"无痛"}],"type":"search_phase_execution_exception","reason":"全部
碎片
失败","phase":"查询","grouped":true,"failed_shards":[{"shard":0,"index":"financials","node":"8SXaM2HcStelpLHvTDSMCQ","reason":{ “类型”:“query_shard_exception”,“原因”:“失败
创建查询: {\n \"bool\" : {\n \"must\" : [\n {\n \"script\" :
{\n \"脚本\" : {\n \"源\" : \"doc['field1'].value >
doc['field2'].value; doc['field1'].value > doc['field2'].value; \",\n
\"lang\" : \"无痛\"\n },\n \"提升\" : 1.0\n }\n }\n ],\n
\“调整纯负数\”:真,\ n \“提升\”:1.0\n
}\n}","index_uuid":"hz12cHg1SkGwq712n6BUIA","index":"财务","caused_by":{"type":"script_exception","reason":"编译
错误","script_stack":["doc['field1'].value > doc[' ...","^----
这里"],"script":"doc['field1'].value > doc['field2'].value;
doc['field1'].value > doc['field2'].value;
","lang":"无痛","caused_by":{"type":"illegal_argument_exception","reason":"不是
一份声明。”}}}}]}