Bis*_*ard 2 filter elasticsearch
我正在尝试在 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"
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
查询的“必须”部分完美运行,当我单独运行它时,我得到两个结果。当我从两个结果之一中挑选出“user_id”并使用该 id 添加查询的“过滤器”部分时,我什么也没得到。
我真正想做的是在 SQL 中使用类似的东西,其中 user_id in ('id1', 'id2'),因此过滤将类似于:
...,
"filter": {
"terms": {
"user_id": ["ea7528f0-1b8a-11e8-a492-13e39bbd17cb"]
}
}
Run Code Online (Sandbox Code Playgroud)
我在这里误解了什么吗?
我猜这是因为user_idfield 被视为 atext并被分析。你应该keyword在这种情况下使用type (你只需要改变 field.map 的映射user_id。
另一种方式(如果您是在Elasticsearch 5+),你可以在搜索keyword子。只需尝试使用以下查询:
{
"query": {
"bool": {
"must": {
"multi_match": {
"query": "Kasper",
"fields": ["name", "first_name", "last_name"]
}
},
"filter": {
"term": {
"user_id.keyword": "ea7528f0-1b8a-11e8-a492-13e39bbd17cb"
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我只在您的查询中更改"user_id"为"user_id.keyword"。
| 归档时间: |
|
| 查看次数: |
2386 次 |
| 最近记录: |