我有几个“应该”子句的查询:

{
    "query": {
        "filtered": {
            "query": {
                "bool": {
                    "should": [
                        {
                            "query_string": {
                                "query": "<condition1>"
                            }
                        },
                        {
                            "query_string": {
                                "query": "<condition1>"
                            }
                        }
                    ]
                }
            },
        }
    },
    "size": 1000,
    "sort": [
        {
            "@timestamp": {
                "order": "asc"
            }
        }
    ]
}

如何找出由condition1产生的查询结果,以及由condition2产生的查询结果?是否可以为不同条件注入(inject)具有不同值的字段,或以其他任何方式区分匹配?

最佳答案

您可以使用named queries来实现。

{
    "query": {
        "bool": {
            "should": [
                {
                    "query_string": {
                        "query": "<condition1>",
                        "_name": "sub_query_1"
                    }
                },
                {
                    "query_string": {
                        "query": "<condition1>",
                        "_name": "sub_query_2"
                    }
                }
            ]
        }
    }
}

然后,您的结果将包含一个matched_filters数组,其中包含sub_query_1sub_query_2或两者。

更新

播放链接:https://www.found.no/play/gist/af1a1fa2b5cf3aa279b1

关于elasticsearch - 如何区分几个应句的命中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21253906/

10-10 23:45