2011-09-28 51 views
1

我正在使用Hibernate搜索3.3來搜索Lucene索引。我有一個過濾器,我需要在某個領域使用,但也使它全文搜索的TOKENIZED。我發現的是,當我將該字段設置爲UN_TOKENIZED時,過濾器工作和全文搜索不會,並且當我將其設置爲TOKENIZED時,全文搜索起作用,過濾器不起作用。Hibernate搜索過濾器不能使用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:"This is the exact value of an organization"我沒有得到任何結果的搜索字詞,但可根據需要過濾器的工作原理。當我將它切換到「TOKENIZED」時相反。

有什麼建議嗎?

回答

2

您應該將該字段編入索引兩次,一次用於搜索(分析)和一次用於過濾。默認使用TermQuery不適用於任何分析。它按指定的方式在索引中搜索該術語。

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

通過這種方法,您擁有可用的標記化和未標記的擁有組織字段。你只需要使用正確的字段名稱。