gpt4 book ai didi

java - Hibernate 搜索过滤器不适用于标记化字段

转载 作者:行者123 更新时间:2023-11-30 04:58:58 25 4
gpt4 key购买 nike

我正在使用 Hibernate search 3.3 来搜索 Lucene 索引。我有一个需要在某个字段上使用的过滤器,但也将其标记为全文搜索。我发现,当我将字段设置为 UN_TOKENIZED 时,过滤器起作用,而全文搜索不起作用;当我将其设置为 TOKENIZED 时,全文搜索起作用,而过滤器不起作用。

POJO

@Field(name = "owningOrganization", index = Index.UN_TOKENIZED, store = Store.YES)
@FieldBridge(impl = OrganizationNameFieldBridge.class)
public Organization getOwningOrganization()
{

过滤

@Factory
public Filter getFilter()
{
BooleanQuery query = new BooleanQuery();
Term orgTerm = new Term("owningOrganization", userOrganization);
Term activeTerm = new Term("currentStateIsActive", "1");
query.add(new TermQuery(orgTerm), Occur.SHOULD);
query.add(new TermQuery(activeTerm), Occur.SHOULD);
return new CachingWrapperFilter(new QueryWrapperFilter(query));
}

当我输入 owningOrganization:"这是组织的确切值" 的搜索词时,我没有得到任何结果,但过滤器按预期工作。当我将其切换为代币化时,情况正好相反。

有什么建议吗?

最佳答案

您应该对该字段建立两次索引,一次用于搜索(分析),一次用于过滤。默认情况下,使用TermQuery不会应用任何分析。它在索引中搜索指定的术语。

@Fields({
@Field(name = "owningOrganization_untokenized", index = Index.UN_TOKENIZED),
@Field(name = "owningOrganization", index = Index.TOKENIZED, store = Store.YES
}
)
public Organization getOwningOrganization(){
}

通过这种方法,您可以拥有可用标记化和未标记化的所属组织字段。您只需使用正确的字段名称即可。

关于java - Hibernate 搜索过滤器不适用于标记化字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7577255/

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