Вы должны использовать FullTextFilter, а не стандартный фильтр Hibernate. Я использовал один в проекте, над которым я сейчас работаю. Вы добавляете аннотацию, подобную приведенной ниже, над определением вашего индексированного класса:
@Indexed
@Entity
@FullTextFilterDefs( {
@FullTextFilterDef(name = "includeInSearchFilter", impl = IncludeInSearchFilterFactory.class,
cache = FilterCacheModeType.INSTANCE_AND_DOCIDSETRESULTS)
})
public class SomeEntity ...
Затем вам также нужно указать указанный класс фабрики, что-то вроде этого:
public class IncludeInSearchFilterFactory {
private String includeInSearchResults;
public void setIncludeInSearchResults(String includeInSearchResults) {
this.includeInSearchResults = includeInSearchResults;
}
@Key
public FilterKey getKey() {
StandardFilterKey key = new StandardFilterKey();
key.addParameter(includeInSearchResults);
return key;
}
@Factory
public Filter getFilter() {
Query query = new TermQuery(new Term("includeInSearchResults", includeInSearchResults));
return new QueryWrapperFilter(query);
}
}
В моем случае элемент includeInSearchResults был индексированным полем для сущности, для которого было установлено значение true, если я хотел, чтобы объект был возвращен в результате поиска, в противном случае было установлено значение false.
Чтобы включить полнотекстовый фильтр:
fullTextQuery.enableFullTextFilter("includeInSearchFilter").setParameter("includeInSearchResults", "true");