我正在使用弹性搜索6.5。
我正在尝试将一个查询组合在一起,以执行以下操作:
在
中搜索文档它还包括一些日期范围标准。
我觉得我需要两组“应该”。因为两组都必须至少有1个匹配项。但是它们不能组合..因为至少也必须匹配一个子键。下面的“必须”是不正确的,因为它“应该”应该是“应”,但是不可能应有两组。
知道我该怎么做吗?
我整理了以下查询:
{
"size" : 200, "from": 0,
"query":{
"bool": {
"should": [{ "term": { "primary_key": "84"}},
{ "term": { "primary_key": "3"}},
{ "term": { "primary_key": "0"}},
{ "term": { "primary_key": "95"}}],
"must": [{ "match_phrase_prefix": { "subkey1" : "65200010100780"}},
{ "match_phrase_prefix": { "subkey2" : "00228315303"}}],
"filter": [ { "range": { "start_date": { "lte": "2018-11-01" }}},
{ "range": { "end_date": { "gt": "2018-11-01"}}}]
}
}
答案 0 :(得分:0)
由于在两组“应该”中都必须至少进行一次匹配,因此我会这样做,在bool/should
子句中使用两个bool/must
:
{
"size": 200,
"from": 0,
"query": {
"bool": {
"must": [
{
"bool": {
"should": [
{
"term": {
"primary_key": "84"
}
},
{
"term": {
"primary_key": "3"
}
},
{
"term": {
"primary_key": "0"
}
},
{
"term": {
"primary_key": "95"
}
}
]
}
},
{
"bool": {
"should": [
{
"match_phrase_prefix": {
"subkey1": "65200010100780"
}
},
{
"match_phrase_prefix": {
"subkey2": "00228315303"
}
}
]
}
}
],
"filter": [
{
"range": {
"start_date": {
"lte": "2018-11-01"
}
}
},
{
"range": {
"end_date": {
"gt": "2018-11-01"
}
}
}
]
}
}
}