Hibernate Поисковый запрос по имени и фамилии - PullRequest
0 голосов
/ 04 мая 2018

Я использую Hibernate Search, чтобы найти людей в моей базе данных.

Они проиндексировали поля firstName и lastName.

Я хочу, чтобы результаты выглядели примерно так:

Поиск: "Robe Pau"

Match:

  • Роберт Полсен
  • Пол Робертсон

Не должно совпадать:

  • Роберт Робертсон
  • Роберт Хендрикс
  • Анна Полсен

Пока ищет как "Роб"

должно соответствовать:

  • Роберт Полсен
  • Пол Робертс
  • Роб Робертс

Мой код выглядит так:

    FullTextEntityManager fullTextEntityManager = Search.getFullTextEntityManager(entityManager);

    Query query = fullTextEntityManager
        .getSearchFactory()
        .buildQueryBuilder()
        .forEntity(Customer.class)
        .overridesForField("firstName", "edgeNGram_query")
        .overridesForField("lastName","edgeNGram_query")
        .get()
        .simpleQueryString()
        .onFields("firstName","lastName")
        .matching(text)
        .createQuery();

Я надеюсь, что кто-то сможет просветить меня.

1 Ответ

0 голосов
/ 04 мая 2018

Учитывая, что поиск будет простым, поскольку вы сопоставляете только имя и фамилию, я бы проанализировал входные данные и добавил * после каждого токена (если его еще нет), чтобы вызвать поиск по шаблону.

Использование простого запроса строки - лучший способ, так что вы на правильном пути, но вам нужно добавить .withAndAsDefaultOperator(), чтобы все искомые слова были обязательными.

...