【发布时间】:2014-09-23 00:57:14
【问题描述】:
我很难让这个 elasticsearch 查询合作。我目前正在尝试使用 Bool 查询来获取精确搜索和分析/全文搜索的结果。
似乎我无法在布尔查询中使用match 过滤器:
{
"bool":{
"should":[
"match":{"mainInfo.states": "Wisconsin"},
"match":{"mainInfo.cities": "WI"}
]
}
}
这会引发解析器错误,告诉我匹配不是查询类型。
我需要能够在也具有术语过滤器的布尔查询中进行全文搜索。所以基本上我想有一个有点像这样的查询:
{
"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 查询中取出时,似乎 match 查询有效,或者 bool 查询有效,但绝不会两者兼而有之。
我似乎无法形成一个匹配多个term 查询和多个匹配查询的查询。 term 必须存在,而match 应该存在(因此至少匹配其中一个过滤器)。
我绝不是弹性搜索专家,当您查找有关更复杂查询的信息时,文档似乎很模糊。
如果有人可以提供如何以这种方式查询的示例,将不胜感激。但是,请不要只将我链接到 Bool Queries 的文档或任何其他 ElasticSearch 文档。我向您保证,我已通读它们,并且尝试了多种不同的方法来执行此查询,但似乎都没有预期的行为。
我正在使用 ElasticSearch 1.3.2
【问题讨论】:
标签: node.js lucene elasticsearch