有两个索引:categories
,posts
。
类别
帖子
我想对两个索引进行查询,并在publish_at
上使用过滤器,publish_until
索引使用posts
。
http://localhost:9200/categories,posts/_search
{
"query": {
"bool": {
"must": {
"multi_match": {
"query": "keyword",
"fields": [
"name^3",
"body"
]
}
},
"filter": [{
"bool": {
"must": [
{
"range": {
"publish_at": {
"lte" : "now"
}
}
},
{
"range": {
"publish_until": {
"gt" : "now"
}
}
}
]
}
}]
}
}
}
此查询仅向我提供posts
作为结果。我的结果中也需要categories
。
如何将日期范围过滤器仅应用于包含publish_at
和publish_until
字段的索引,并跳过其他索引的日期范围过滤器?
答案 0 :(得分:1)
在摆弄了bool
一天之后,我开始工作了。
{
"query": {
"bool" : {
"must" : [
{
"multi_match": {
"query": "keyword",
"fields": [
"name^3",
"body"
]
}
},
{
"bool": {
"should": [
{
"bool": {
"must": [
{
"range": {
"publish_at": {
"lte" : "now"
}
}
},
{
"range": {
"publish_until": {
"gt" : "now"
}
}
}
]
}
},
{
"bool": {
"must_not": [
{
"exists": {
"field": "publish_at"
}
},
{
"exists": {
"field": "publish_until"
}
}
]
}
}
]
}
}
]
}
}
}