休眠搜索 FullTextFilter 缓存不工作
Hibernate Search FullTextFilter cache not working
我有以下实体声明:
@FullTextFilterDefs({
@FullTextFilterDef(name = "withStock", impl = WithStockFilterFactory.class, cache = FilterCacheModeType.INSTANCE_ONLY),
@FullTextFilterDef(name = "onlyActive", impl = OnlyActiveFilterFactory.class, cache = FilterCacheModeType.INSTANCE_ONLY),
})
public class Article {
@Column
@Field(index = Index.YES, analyze = Analyze.NO, store = Store.NO)
protected Boolean activo;
}
这是我的过滤器:
public class OnlyActiveFilterFactory {
private Boolean onlyActive;
public void setOnlyActive(Boolean onlyActive) {
this.onlyActive = onlyActive;
}
@Factory
public Query getFilter() {
List<Term> terms = new ArrayList<>();
terms.add(new Term("active", "true"));
if (!onlyActive) {
terms.add(new Term("active", "false"));
}
return new QueryWrapperFilter(new TermsQuery(terms));
}
}
但是当我执行搜索时一切正常,直到我更改实例的 active
的值,因为无论参数 onlyActive
的值如何,它总是会在任何搜索中返回设置为过滤器;对于其他每个实例都可以正常工作。
在我重建 整个索引 之前,会发生这种情况。我试图在更改它的 active
值后重新索引实体,像这样但没有运气:
FullTextEntityManager fullTextEntityManager = Search.getFullTextEntityManager(entityManager);
fullTextEntityManager.index(article);
有什么想法吗?
没关系,
存储库中更改 active
属性值的方法已用 @Query
注释,因此对数据库的操作不会强制重新索引和缓存更新。
我有以下实体声明:
@FullTextFilterDefs({
@FullTextFilterDef(name = "withStock", impl = WithStockFilterFactory.class, cache = FilterCacheModeType.INSTANCE_ONLY),
@FullTextFilterDef(name = "onlyActive", impl = OnlyActiveFilterFactory.class, cache = FilterCacheModeType.INSTANCE_ONLY),
})
public class Article {
@Column
@Field(index = Index.YES, analyze = Analyze.NO, store = Store.NO)
protected Boolean activo;
}
这是我的过滤器:
public class OnlyActiveFilterFactory {
private Boolean onlyActive;
public void setOnlyActive(Boolean onlyActive) {
this.onlyActive = onlyActive;
}
@Factory
public Query getFilter() {
List<Term> terms = new ArrayList<>();
terms.add(new Term("active", "true"));
if (!onlyActive) {
terms.add(new Term("active", "false"));
}
return new QueryWrapperFilter(new TermsQuery(terms));
}
}
但是当我执行搜索时一切正常,直到我更改实例的 active
的值,因为无论参数 onlyActive
的值如何,它总是会在任何搜索中返回设置为过滤器;对于其他每个实例都可以正常工作。
在我重建 整个索引 之前,会发生这种情况。我试图在更改它的 active
值后重新索引实体,像这样但没有运气:
FullTextEntityManager fullTextEntityManager = Search.getFullTextEntityManager(entityManager);
fullTextEntityManager.index(article);
有什么想法吗?
没关系,
存储库中更改 active
属性值的方法已用 @Query
注释,因此对数据库的操作不会强制重新索引和缓存更新。