Elasticsearch. Поиск по объединенным полям

Здравствуй, Хабр.
Для поиска по CouchDB использую Elasticsearch.
Поиск осуществляется по Ф.И.О. В базе есть объект с полями name. last, name .first, name.middle.
Ищу так:

{
  "query": {
    "bool": {
      "must": [
        {
          "multi_match": {
            "query": "Петров Иван Сергеевич",
            "fields": [
              "name.last",
              "name.first",
              "name.middle"
            ]
          }
        }
      ]
    }
  },
  "filter": {},
  "from": 0,
  "size": 20
}



И всё бы вроде хорошо, но при поиске проверяется соответствие каждому из полей по очереди.
Т.е. в результат попадут все Петровы, потом все Иваны, далее все Сергеевичи.
Нужно как-то объединить поля name. last, name .first, name.middle и осуществлять поиск по этому объединенному полю.
Кто нибудь знает, как это сделать?
  • Вопрос задан
  • 4358 просмотров
Решения вопроса 1
@Wuron
Попробуйте как-то так:

{
  "query": {
    "bool": {
      "should": [
        {
          "match": {"name.last": "Петров Иван Сергеевич"}
        },
        {
          "match": {"name.first": "Петров Иван Сергеевич"}
        },
        {
          "match": {"name.middle": "Петров Иван Сергеевич"}
        }
      ],
      "minimum_number_should_match": 1
    }
  },
  "filter": {},
  "from": 0,
  "size": 20
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через TM ID
Похожие вопросы