我有两个索引pages
和events
都使用简单的搜索查询进行搜索:
{
"query": {
"bool": {
"must": [
{
"match": {
"siteHandle": "testing"
}
},
{
"simple_query_string": {
"query": "Test New Event",
"fields": [
"Name^3",
"evName^3",
"Description^2",
"evDescription^2",
"_all"
]
}
}
]
}
}
}
映射看起来像这样:
events
{
"events": {
"properties": {
"evDescription": {
"type": "text"
},
"evName": {
"type": "text"
},
"siteHandle": {
"type": "keyword"
},
"startTime": {
"type": "integer"
}
}
}
}
pages
{
"pages": {
"properties": {
"cName": {
"type": "text"
},
"cPath": {
"type": "keyword"
},
"content": {
"type": "text"
},
"siteHandle": {
"type": "keyword"
}
}
}
}
我需要过滤掉比现在少startTime
的事件,但我不确定如何在不过滤掉所有pages
的情况下执行此操作。
问:我如何使用此查询同时搜索events
和pages
,同时仅过滤events
比现在少startTime
的{{1}}?
答案 0 :(得分:1)
你需要添加另一个句子来说" startTime字段丢失或者startTime少于现在"。
There is no missing query,因此您可以结合使用bool查询 must_not 和存在查询。看起来应该是这样的:
{
"query": {
"bool": {
"must": [
{
"match": { ... }
},
{
"simple_query_string": { ... }
},
{
"bool": {
"should": [
{
"bool": {
"must_not": {
"exists": {
"field": "startTime"
}
}
}
},
{
"range": {
"startTime": {
"lt": "now"
}
}
}
]
}
}
]
}
}
}