gpt4 book ai didi

java - 在 Hibernate 搜索中使用 Lucene 过滤器

转载 作者:太空宇宙 更新时间:2023-11-04 06:37:56 25 4
gpt4 key购买 nike

我有一个类项目。项目具有“状态”属性。状态可以是“A”- Activity 和“I”- 不活动。状态不时发生变化。元素还有一些其他属性,例如可以索引的“名称”等。该应用程序的用户可以按名称等搜索项目。之后会显示相关项目的列表。不应显示非 Activity 项目。

为了过滤掉不活动的项目,我声明了一个过滤器:

@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");

但是如果我不使用这种方法,我会得到相同的结果。不活动的项目将被过滤掉。

问题是:

  1. 我需要声明此过滤器吗?或者我可以直接使用它(如何?)。
  2. 似乎新创建的非 Activity 项目根本没有索引。为什么?过滤器的声明如何影响索引?

提前致谢。

最佳答案

1.

如果您不想使用@FullTextFilterDef,您可以使用

org.hibernate.search.FullTextQuery.setFilter(Filter)

但是建议使用声明性定义,因为上述方法已半弃用并被考虑删除。 (实际上,如果您确实需要保留它,请告诉我们)。

2.

不,Filter 实例对索引更新没有影响。其他因素正在影响您的测试,例如,不要忘记索引更新是在提交时执行的,而不是之前。

替代方案

您可能还想考虑使用 indexing interceptor 。与 Filter 相比,效果类似:

  • 使用拦截器时,您可以将索引保持较小,这可能会更有效。
  • 使用过滤器时,您可以选择允许搜索不活动的条目;如果在不同的用例中您也需要允许搜索不活动的项目,这可能会很有用。

关于java - 在 Hibernate 搜索中使用 Lucene 过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25093682/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com