Поиск Hibernate, я делаю это правильно? - PullRequest
1 голос
/ 16 марта 2011

У меня есть сущность, которую я хочу проиндексировать с помощью поиска Hibernate, чтобы воспользоваться всеми функциями полнотекстового поиска.У сущности есть несколько полей, по которым мне нужно отфильтровать.Например:

@Field(index = Index.TOKENIZED, store = Store.NO)
@Lob
private String description;

@Field(index = Index.UN_TOKENIZED, store = Store.NO)
@Enumerated(EnumType.STRING)
@NotNull
private Type type;

Поле description - это то, для чего я хочу использовать полный текстовый поиск.Поле Type, с которым я просто хочу провести простое старое сравнение.Мне кажется немного неправильным, что Lucene должен иметь дело с прямым сопоставлением поверх полного текстового поиска, и я должен использовать что-то вроде CriteriaBuilder для обработки дополнительной фильтрации.Однако я не могу найти способ объединить эти два параметра и прибегаю к использованию BooleanJunction операторов в моем алгоритме поиска с must, matching и keyword в полях, которые мне нужны для прямого соответствия.

Итак, мой вопрос, правильно ли я делаю или я должен использовать Lucene только для полнотекстового поиска и выполнять фильтрацию других атрибутов каким-либо другим способом?

Большое спасибо, Finbarr

1 Ответ

1 голос
/ 27 августа 2011

@ Finbarr, я предлагаю просто использовать Hibernate Search для этого.Я бы порекомендовал, чтобы для фильтрации ваших результатов по типу вы использовали Hibernate Search FullTextFilter и включили фильтр в вашем FullTextQuery, который выполняет поиск по «описанию» непосредственно перед выполнением этого запроса.Я могу опубликовать пример для вас, если документов недостаточно, я часто использовал эти фильтры, и они работают очень хорошо.

...