Поиск по другому полю, когда ничего не найдено ElasticSearch - PullRequest
0 голосов
/ 13 сентября 2018

Допустим, у меня есть индекс с двумя текстовыми полями:

"properties" : {
   "name" : {
      "type" : "text"
    },
    "description" : {
      "type" : "text"
    }
}

Мне нужно реализовать полнотекстовый поиск по этим двум полям с приоритетом.Сначала по имени, а затем по описанию.Дело в том, что мне не нужно искать в описании, если я уже нашел что-то по имени.Я могу реализовать два запроса и проверить, возвращает ли поиск по имени 0 результат, чем поиск по описанию.Но есть ли способ реализовать это с помощью одного запроса?

UPD.Мой запрос довольно прост:

"query": {
  "bool": {
    "should": [
      {
        "match": {
          "name": {
            "query": "some user input here",
            "operator": "and"
          }
        }
      },

      {
        "match": {
          "description": {
            "query": "some user input here",
            "operator": "and"
          }
        }
      }
    ]
  }
}

Уточненный вопрос: как сгруппировать результат одного запроса в две группы: те, которые совпадают по имени, и те, которые соответствуют по описанию?Первая группа должна быть набрана выше, чем вторая.Мне нужно знать общее количество для обеих групп, чтобы реализовать поведение подкачки в моем приложении.Поэтому, когда первая группа пуста, я покажу вторую, но не только потом.В противном случае я спрячу вторую группу от пользователя.Также должна быть оценка релевантности (предоставленной анализатором) внутри группы, чтобы предоставить пользователям приемлемые результаты поиска.

...