В Elastic search, как мне сопоставить несколько объектов в массиве объектов? - PullRequest
0 голосов
/ 04 марта 2019

Я следую приведенному здесь примеру:

https://www.elastic.co/guide/en/elasticsearch/reference/current/nested.html

Следующий запрос:

GET my_index/_search
{
  "query": {
    "nested": {
      "path": "user",
      "query": {
        "bool": {
          "must": [
            { "match": { "user.first": "Alice" }},
            { "match": { "user.last":  "White" }}
          ]
        }
      }
    }
  }
}

соответствует одной записи, как и ожидалось.Предположим, что вместо этого я хочу вернуть только документы, в которых пользователь «Джон Смит» и «Алиса Уайт».

Я пытался:

GET my_index/_search
{
  "query": {
    "nested": {
      "path": "user",
      "query": {
        "bool": {
          "must": [
            { "match": { "user.first": "Alice" }},
            { "match": { "user.last":  "White" }},
            { "match": { "user.first": "John" }},
            { "match": { "user.last":  "Smith" }}
          ]
        }
      }
    }
  }
}

, но это возвращает ноль результатов.Как я могу получить документы как с «Алисой Уайт», так и с «Джоном Смитом» (это должен быть один и тот же документ, возвращенный в исходном результате)?

1 Ответ

0 голосов
/ 04 марта 2019

Вы должны использовать запрос bool , чтобы объединить более одного предложения.С вашим синтаксисом вы ищете документ, в котором значение Алисы и Джона указано в одном и том же поле.Попробуйте, действительно:

{
  "query": {
    "bool": {
      "should": [
        {
          "nested": {
            "path": "user",
            "query": {
              "bool": {
                "must": [
                  {
                    "match": {
                      "user.first": "Alice"
                    }
                  },
                  {
                    "match": {
                      "user.last": "White"
                    }
                  }
                ]
              }
            }
          }
        },
        {
          "nested": {
            "path": "user",
            "query": {
              "bool": {
                "must": [
                  {
                    "match": {
                      "user.first": "John"
                    }
                  },
                  {
                    "match": {
                      "user.last": "Smith"
                    }
                  }
                ]
              }
            }
          }
        }
      ]
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...