我有一个课程项目。项目具有“状态”属性。状态可以是'A' - 活动,'I' - 不活动。状态变化的时间。 物品有一些其他属性,例如'name'等可以编入索引。 应用程序的用户可以按名称等搜索项目。之后,他们会显示相关项目列表。 不应显示非活动项目。
要过滤掉我声明过滤器的非活动项目:
@FullTextFilterDef(name = "statusFilter", impl = StatusFilterFactory.class)
public class Item
{ ... }
public class StatusFilterFactory {
@Factory
public Filter getFilter() {
BooleanQuery query = new BooleanQuery();
Term statusTerm = new Term("status", "A");
query.add(new TermQuery(statusTerm), BooleanClause.Occur.MUST);
return new CachingWrapperFilter(new QueryWrapperFilter(query));
}
}
当我需要创建项目列表时,我使用enableFullTextFilter(“statusFilter”)方法:
fullTextQuery.setSort(sort).setFirstResult(offset).setMaxResults(limit).enableFullTextFilter("statusFilter");
但如果我不使用这种方法,我会得到相同的结果。过滤掉非活动项目。
问题是:
提前致谢。
答案 0 :(得分:1)
如果您不想使用 @FullTextFilterDef ,可以使用
org.hibernate.search.FullTextQuery.setFilter(Filter)
但建议使用声明性定义,因为上述方法已被半弃用并被视为已删除。 (实际上,如果您确实需要它,请告诉我们。)
不,Filter实例对索引更新没有影响。其他一些因素会影响您的测试,例如,不要忘记更新的索引是在提交时执行的,而不是之前。
您可能还想考虑使用indexing interceptor。与过滤器相比的效果类似: