Java Hibernate搜索筛选器不使用标记化字段

Java Hibernate搜索筛选器不使用标记化字段,java,hibernate,lucene,hibernate-search,Java,Hibernate,Lucene,Hibernate Search,我正在使用HibernateSearch3.3来搜索Lucene索引。我有一个过滤器,我需要在某个字段上使用,但也使其标记为全文搜索。我发现,当我将字段设置为未标记时,过滤器工作,全文搜索不工作;当我将字段设置为标记时,全文搜索工作,而过滤器不工作 波乔 滤器 @Factory public Filter getFilter() { BooleanQuery query = new BooleanQuery(); Term orgTerm = new Term("owningOr

我正在使用HibernateSearch3.3来搜索Lucene索引。我有一个过滤器,我需要在某个字段上使用,但也使其标记为全文搜索。我发现,当我将字段设置为未标记时,过滤器工作,全文搜索不工作;当我将字段设置为标记时,全文搜索工作,而过滤器不工作

波乔

滤器

@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(){
}
使用这种方法,您可以将“拥有组织”字段标记化和非标记化。您只需要使用正确的字段名

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