2011-11-04 52 views
2

我在寫一個基於Seam的應用程序,利用JPA/Hibernate和Hibernate Search(Lucene)。我有一個名爲Item的對象,它與對象 關鍵字具有多對多關係。它看起來像這樣(一些註釋略):Lucene/Hibernate搜索 - 查詢關聯的集合?

@Indexed 
public class Item { 

    ... 

    @IndexedEmbedded 
    private List<Keyword> keywords; 

    ... 
} 

@Indexed 
public class Keyword { 

    ... 

    @Field 
    private String value; 

    ... 
} 

我希望能夠運行包含特定關鍵字的值的所有項目對象的查詢。我在我的數據庫中設置了許多測試對象,並且它看起來正在正確創建索引。但是,當我創建並運行查詢"keywords.value" = <MY KEYWORD VALUE>時,我總是得到0個返回的結果。

Hibernate Search/Lucene是否有能力運行這種類型的查詢?還有什麼我應該做的?是否有額外的註釋可能會丟失?

回答

1

Hibernate Search非常適合這種查詢;但它可以以更簡單的方式完成。

在您的問題:由Hibernate搜索(Lucene的)索引會文本進行分析,並且默認分析儀適用:

  1. 下殼體輸入
  2. 分割在不同的方面對空白

因此,如果您將查詢定義爲TermQuery(我假設這是您所做的,因爲它是最簡單的形式),那麼您必須匹配小寫形式的令牌(不帶間距) 。

考慮到這一點,您可以將所有關鍵字轉儲到Item實體上的單個Blob字符串中,而無需將其映射爲單獨的關鍵字,並將它們鏈接在由空格分隔的單個字符串中。