我很难让这个弹性搜索查询合作。我目前正在尝试使用Bool查询来获取精确搜索和全文搜索的结果。
似乎无论如何我都不能在bool查询中使用match
过滤器:
{
"bool":{
"should":[
"match":{"mainInfo.states": "Wisconsin"},
"match":{"mainInfo.cities": "WI"}
]
}
}
这会抛出解析器错误,告诉我匹配不是查询类型。
我需要能够在一个也有术语过滤器的bool查询中进行全文搜索。所以基本上我想要一个像这样的查询:
{
"bool":{
"must":[
"term":{"mainInfo.clientId":"123456"}
],
"should":[
"match":{"mainInfo.states": "Wisconsin"},
"match":{"mainInfo.cities": "WI"}
]
}
}
我可以拥有1个或2个必须的术语,以及几个全文搜索,其中2个应该存在。
我还使用function_score查询使用random_seed
返回随机,可分页的结果。
我的问题是我无法在我的bool查询中运行全文查询。似乎只有term
过滤器才有效。此外,当我将match
查询放在bool查询之外时,似乎匹配查询有效,或者bool查询有效,但两者都没有。
我似乎无法形成一个匹配多个term
查询和多个匹配查询的查询。 term
必须存在,match
应该存在(因此至少匹配其中一个过滤器)。
我绝不是一名弹性搜索专家,当你在寻找更复杂查询的信息时,文档看起来很模糊。
如果有人可以举例说明如何以这种方式进行查询,我们将不胜感激。但是,请不要将我链接到Bool Queries或任何其他ElasticSearch文档的文档。我向你保证我已经彻底阅读了它们,并且我已经尝试了许多不同的方法来执行这个查询,但似乎都没有预期的行为。
我使用的是ElasticSearch 1.3.2
答案 0 :(得分:2)
似乎无论如何我都不能在bool查询中使用匹配过滤器:
您的查询语法不正确,如果您有多个子句,则每个子句都应包装在自己的对象中:
{
"query":{
"custom_filters_score":{
"query":{
"nested":{
"path":"mainInfo",
"query":{
"bool":{
"should":[
{
"match":{
"mainInfo.states":"WI"
}
},
{
"match":{
"mainInfo.cities":"Wisconsin"
}
}
]
}
}
}
},
"filters":[{
"term":{
"mainInfo.clientId":"123456"
},
"script":"yourscriptgoeshere"
}]
}
}
}