我有一些弹性搜索记录存储为空字符串或空值。我正在尝试开发一个允许我从索引中返回这些内容的查询。我提出了:
{
'query': {
'filtered': {
'filter': {
'bool': {
'should': [
{'term': {'field1': ''}},
{"missing" : {"field": "field1"}},
],
}
}
}
}
}
符合我的目的,并返回正确的行。但是,如果我尝试搜索不止一个字段,那么'should'子句或两个字段在一起。这是一个问题,因为我希望有一个AND关系:
{
'query': {
'filtered': {
'filter': {
'bool': {
'should': [
{'term': {'field1': ''}},
{"missing" : {"field": "field1"}},
# these fields should be AND but are OR
{'term': {'field2': ''}},
{"missing" : {"field": "field2"}},
],
}
}
}
}
}
我是否可以使用单个过滤器完成上述操作,或者将两个过滤器合并在一起?
答案 0 :(得分:2)
您可以将and
filter用于此目的,并使用两个bool/should
过滤器,如下所示:
{
"query": {
"filtered": {
"filter": {
"and": [
{
"bool": {
"should": [
{
"term": {
"field1": ""
}
},
{
"missing": {
"field": "field1"
}
}
]
}
},
{
"bool": {
"should": [
{
"term": {
"field2": ""
}
},
{
"missing": {
"field": "field2"
}
}
]
}
}
]
}
}
}
}
或者你也可以bool/must
两个or
filters这样:
{
"query": {
"filtered": {
"filter": {
"bool": {
"must": [
{
"or": [
{
"term": {
"field1": ""
}
},
{
"missing": {
"field": "field1"
}
}
]
},
{
"or": [
{
"term": {
"field2": ""
}
},
{
"missing": {
"field": "field2"
}
}
]
}
]
}
}
}
}
}