具有multi_match的Elasticsearch过滤器

时间:2018-02-27 10:03:17

标签: elasticsearch filter

我试图在ElasticSearch中编写一个查询,我将multi_match与过滤器结合使用id或数字og ID。

这是我到目前为止所做的:

{
    "query": {
        "bool": {
            "must": {
                "multi_match": {
                    "query": "Kasper",
                    "fields": ["name", "first_name", "last_name"]
                }
            },
            "filter": {
                "term": {
                    "user_id": "ea7528f0-1b8a-11e8-a492-13e39bbd17cb"
                }
            }
        }
    }
}

"必须"部分查询工作正常,当我单独运行时,我得到两个结果。 当我选择" user_id"从两个结果中的一个中添加"过滤器"使用该ID的查询的一部分,我什么都没得到。

我真正想做的是在SQL中使用user_id(' id1',' id2'),因此过滤将类似于:

...,
"filter": {
    "terms": {
        "user_id": ["ea7528f0-1b8a-11e8-a492-13e39bbd17cb"]
    }
}

我在这里误解了什么吗?

1 个答案:

答案 0 :(得分:2)

我猜这是因为employeeCredentials.setcredentials("ADDFFF") when(ThirdpartyClass().thirdpartyMethodB().thirdpartyMethodc().getCredentials).thenReturn(employeeCredentials); 字段被视为According to GCP VISION API PRICE ESTIMATE并被分析。在这种情况下,您应该使用text类型(只需更改user_id字段的映射。

另一种方式(如果您使用的是Elasticsearch 5+),您可以在keyword中进行搜索。只需尝试使用以下查询:

user_id

我只在您的查询中将{ "query": { "bool": { "must": { "multi_match": { "query": "Kasper", "fields": ["name", "first_name", "last_name"] } }, "filter": { "term": { "user_id.keyword": "ea7528f0-1b8a-11e8-a492-13e39bbd17cb" } } } } } 更改为"user_id"

相关问题