Elasticsearch Query DSL с логическими условиями И и И - PullRequest
0 голосов
/ 19 марта 2020

У меня есть следующие документы в Elasticsearch.

{
"id": "1234",
"color": "red"
}

{
"id": "1234",
"color": "burgundy"
}

{ "id": "4321",
  "color": "red"
}

{ "id": "1111",
  "color": "red"
}

{ "id": "2222",
   "color": "red"
}

{ "id": "3333",
   "color": "red"
}

{ "id": "4444",
   "color": "red"
}

{ "id": "5555",
  "color": "red"
}

{ "id": "6666",
  "color": "red"
}

Я хочу получить только те документы, которые соответствуют следующим условиям.

  • Идентификатор документа со значением либо 1234, либо 4321
  • и Документы с красным цветом.

Я пытаюсь подготовить запрос DSL, который вернет только 2 документа (первый и третий) , Я попробовал следующее, но он возвращает все документы, которые имеют красный цвет, и игнорирует первое условие.

{"query": 
    {"bool": 
        {"should": [
            {"term": {"id": "1234"}},
            {"term": {"id": "4321"}}
        ],      
        "filter": [
          {"term": {"color": "red"}}
        ]
        }
    }
}

Может кто-нибудь помочь с этим? Заранее спасибо.

1 Ответ

1 голос
/ 19 марта 2020
{
    "query": {
        "bool": {
            "must": [
                {
                    "terms": {
                        "id": [
                            "1234",
                            "4321"
                        ]
                    }
                },
                {
                    "term": {
                        "color": "red"
                    }
                }
            ]
        }
    }
}
...