我正在尝试构建一个查询,尝试在其中搜索特定国家/地区的人名。如果输入John
和USA
,则只能找到人名为John
的人的结果(通过属性:姓名)从美国(通过属性:国家),其他国家的结果不应出现在结果中。
我尝试过的:
"query": {
"bool": {
"should": [
{
"multi_match": {
"query": "John",
"fields": ["username", "first_name", "last_name"],
"fuzziness": "AUTO",
"minimum_should_match": "50%"
}
}
],
"filter": [
{
"match": {
"country": "USA"
}
},
{
"match": {
"is_citizen": true
}
}
]
}
}
对于上面的查询,我看到的问题是,结果还显示了名字不是John
但来自USA的人**。
Expectation : To filter results of given keyword specific to given country.
2条答案
按热度按时间dnph8jn41#
您需要在名称查询中使用
must
子句,而不是使用should
。下面的查询应该会给予你预期的结果。参考boolean query official doc以了解与示例的区别。
ryevplcw2#
您正在使用should子句,这就是它不起作用的原因。您可以使用
must
而不是should
,它将解决您的问题。您可以使用
"type":"phrase_prefix"
来匹配Jo
和John
。您可以按如下所示更改查询,它将正常工作: