小编典典

如何编写Elasticsearch多个必须脚本查询?

elasticsearch

我想使用查询来比较多个字段。我有字段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“:”不是声明。“}}}}]}}


阅读 406

收藏
2020-06-22

共1个答案

小编典典

您需要像这样结合两个条件:

doc['field1'].value > doc['field2'].value && doc['field3'].value > doc['field4'].value
                                           ^
                                           |
                               replace the semicolon by &&
2020-06-22