Как написать Elasticsearch DSL с несколькими полями и несколькими терминами запроса? - PullRequest
0 голосов
/ 15 февраля 2019

Как мне написать DSL-запрос Elasticsearch (6.6) для возврата только документов Doc2 и Doc3 из этого примера пула:

Doc1 { "Field1" : "Term1", "Field2" : "Term2" }
Doc2 { "Field1" : "Term6", "Field2" : "Term2" }
Doc3 { "Field1" : "Term6", "Field2" : "Term5" }
Doc4 { "Field1" : "Term3", "Field2" : "Term1" }

Логика запроса : (Поле1 или Поле2)не равно (Срок 1 или Срок 2 или Срок 3)

1 Ответ

0 голосов
/ 15 февраля 2019

Предполагая, что тип данных Field1 и Field2 - это ключевое слово, которое можно использовать с условием must и must_not для запрос bool с условиями запроса , чтобы получить желаемый результат.

Запрос будет выглядеть следующим образом:

{
  "query": {
    "bool": {
      "should": [
        {
          "bool": {
            "must_not": [
              {
                "terms": {
                  "Field1": [
                    "Term1",
                    "Term2",
                    "Term3"
                  ]
                }
              }
            ]
          }
        },
        {
          "bool": {
            "must_not": [
              {
                "terms": {
                  "Field2": [
                    "Term1",
                    "Term2",
                    "Term3"
                  ]
                }
              }
            ]
          }
        }
      ]
    }
  }
}
...