Есть ли способ в 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 такой встроенной функции нет, но вы можете сделать это самостоятельно. Вместо того, чтобы выполнять один запрос, запустите три:
- один с фильтром "заголовок или текст", без огранки
- один с фильтром только в поле "заголовок", с фасеткой в поле "заголовок"
- один с фильтром только в поле "текст", с огранкой в поле "текст"
Затем соберите результаты первого запроса, фасет "title" из второго запроса и фасет "text" из третьего запроса.
Дополнительная информация о гранении в Hibernate Search: https://docs.jboss.org/hibernate/stable/search/reference/en-US/html_single/