【发布时间】:2015-12-16 03:48:00
【问题描述】:
我对如何实现过滤后的查询感到困惑,该查询与“所有”提供的术语相匹配,而不是“任何”,基本上是“和”与“或”。
鉴于我有(一个非常简化的版本)一个文件:
{
"content": {
"tags": [
{
"tag": "Express",
"type": "other"
},
{
"tag": "Baking",
"type": "other"
}
]
}
}
目前我有以下搜索:
{
"min_score": 0.5,
"query": {
"filtered": {
"query": {},
"filter": {
"bool": {
"must": [{
"nested": {
"path": "content.tags",
"filter": {
"terms": {
"content.tags.tag": ["Express", "Baking"],
}
}
}
}],
"should": []
}
}
}
},
"sort": ["_score"],
"from": 0,
"size": 12
}
我知道这将查找任何具有“Express”的文档,并添加到任何具有“Baking”的文档。我需要的是一个过滤器,它只匹配同时存在两个标签的文档。
我已阅读文档,我对它们的理解是我需要将"execution": "and" 添加到过滤器中
{
"min_score": 0.5,
"query": {
"filtered": {
"query": {},
"filter": {
"bool": {
"must": [{
"nested": {
"path": "content.tags",
"filter": {
"terms": {
"content.tags.tag": ["Express", "Baking"],
"execution": "and"
}
}
}
}],
"should": []
}
}
}
},
"sort": ["_score"],
"from": 0,
"size": 12
}
遗憾的是,这匹配 0 个文档,而我知道其中有 28 个。
我的content.tags.tag 字段没有被分析,而content.tags 有很多嵌套对象,如上所述,所以我理解它的意思是它必须包含每个标签之一,但似乎并非如此。
有谁知道我是怎么做到的?
【问题讨论】:
-
我还要提一下,这里我把查询的主体留空了,我只关心这个问题中的过滤器。我有其他查询部分没有反映该问题,并且按预期工作。
-
你用的是什么版本的ES? 2.0 忽略执行选项(见elastic.co/guide/en/elasticsearch/reference/current/…)
-
嗨,我还在 1.7 上,因为它是生产服务器,在这方面很幸运。
标签: elasticsearch