Есть ли способ в hibernate-search для фасета по полям, в которых был найден поисковый термин?

Рассмотрим следующую проиндексированную сущность:

@Entity
@Indexed
public class Document {

    ...

    @Field
    private String title;

    @Field
    private String text;

}

Есть ли способ представить пользователю фасет, который будет содержать две опции title а также text с количеством документов, в которых был найден поисковый запрос title а также text соответственно? И пользователь должен иметь возможность выбирать эти параметры для поиска только по интересным полям.

Например, есть три документа:

{ "title" : "One", "text" : "One" }
{ "title" : "One and Two", "text" : "Two" }
{ "title" : "Three", "text" : "Three and Two" }

И поисковый запрос "один": тогда фасет будет:

{ "title" : 2, "text" : 1 }

1 ответ

Решение

В Hibernate Search такой встроенной функции нет, но вы можете сделать это самостоятельно. Вместо того, чтобы выполнять один запрос, запустите три:

  1. один с фильтром "заголовок или текст", без огранки
  2. один с фильтром только в поле "заголовок", с фасеткой в ​​поле "заголовок"
  3. один с фильтром только в поле "текст", с огранкой в ​​поле "текст"

Затем соберите результаты первого запроса, фасет "title" из второго запроса и фасет "text" из третьего запроса.

Дополнительная информация о гранении в Hibernate Search: https://docs.jboss.org/hibernate/stable/search/reference/en-US/html_single/

Другие вопросы по тегам