Elasticsearch 5.6, сочетающий постоянный счет и запросы bool

В настоящее время я работаю над поисковый движок для сайта, который использует PHP API запрашивая в Elasticsearch 5.6 индекс.
Я давно застрял на конкретном запросе, и поэтому мне нужна помощь сообщества.
Позвольте мне привести некоторые подробности:

  • Индекс ES содержит документы, которые являются лицами, и эти лица имеют имя и фамилию (оба значения идентичны, если человек является мужчиной или женщиной, не состоящей в браке). Есть также еще несколько частей информации, таких как имя, дата и другие, не относящиеся к моему вопросу.
  • Поисковая система сайта имеет только одно поле для имени и фамилии.

Меня попросили создать запрос, поэтому всякий раз, когда пользователь вводит значение в это поле, я должен получить следующие результаты:

  • Если значение соответствует 100% имени рождения ИЛИ фамилии человека, я должен получить их с точно таким же значением оценки
  • Если значение не соответствует 100%, я получу результаты, по крайней мере, с 5 символами, которые следуют аналогично в их имени рождения ИЛИ фамилии
  • Результаты должны быть отсортированы очень определенным образом.
    Сначала результаты, которые соответствуют 100%, отсортированы по дате, алфавитному порядку по имени и фамилии, а затем результаты, которые соответствуют частично отсортированному по счету, дате и алфавитному порядку.

Поля, которые я запрашиваю, соответственно названы nom.unsplit, nom.ngram, nomNaissance.unsplit, nomNaissance.ngram

Я пытался этот запрос, который дает идеальные результаты для поиска по имени рождения, но не смог найти фамилию (очевидно). И если я добавлю 2 других поля в запрос, результаты все равно не будут удовлетворительными, потому чтоasticsearch дает лучший показатель релевантности, если фамилия совпадает, чем если имя совпадает.

Запрос ES

Я также пробовал запросы constant_score с фильтром и повышением. Это работает, но только если я ищу 100% результат.
Я попытался объединить запрос bool и запрос с постоянной оценкой, но не могу заставить его работать.
Я хотел бы добавить, что поисковая система содержит больше полей, поэтому мне нужно иметь возможность вставить этот конкретный запрос в больший запрос bool, который собирает все подзапросы, которые я уже использую.
Я воспользуюсь любым советом и предоставлю дополнительную информацию, если это необходимо.

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …