我的结果来自ES查询。过滤查询会产生一些令人困惑的结果,我不知道如何克服它。 所以:
String s = getIntent().getStringExtra("Edit Text data");
我想要的是:获取其名称,描述或文本与查询或所有项目(它是映射中的_type)匹配的所有记录,其Id为1或2。 结果似乎正是我的预期,我得到了例如:5次点击,2次联系_type,1项目匹配“searchquery”和2项Id 1或2项。好!
但我有一些授权,因此并非所有用户都可以访问所有模块(项目有另一个字段,例如:ModuleId)。
所以我想将结果限制为特定的ModuleIds:
{
"query":{
"bool":{
"should":[
{
"multi_match":
{
"query":"searchquery",
"operator":"and",
"fields":["Name", "Description", "Text"]
}
},
{
"bool":{
"must": [
{"terms": {"Id": [1, 2]}},
{"term": {"_type": "Project"}}
]
}
}
]
}
}
}
繁荣!在结果中,我得到所有,其匹配上述查询和所有具有ModuleId 9或5的项目。我想要的是缩小结果范围而不是扩大它们。我尝试了很多与should,must,filter(bool过滤器)的组合。我也尝试了post_filter,它“神奇地”给了我预期的结果,但我也有一些聚合(不是在这个例子中),所以它不是一个选项。
答案 0 :(得分:2)
minimum_should_match: 1
外部bool查询中的做得很好,就像魅力一样。
{
"query":{
"bool":{
"should":[
{
"multi_match":
{
"query":"searchquery",
"operator":"and",
"fields":["Name", "Description", "Text"]
}
},
{
"bool":{
"must": [
{"terms": {"Id": [1, 2]}},
{"term": {"_type": "Project"}}
]
}
}
],
"filter": [
{"terms": {"ModuleId": [9, 5]}}
],
"minimum_should_match": 1
}
}
}