我有一個名爲'Patient'的字符串字段名爲'firstName','lastName'和'secondLastName'的實體(在西班牙語中,我們同時使用父親和母親姓氏)Hibernate搜索:如何通過單獨的列搜索全名
我有一個文本框按照名稱搜索患者的視圖,其中用戶可以按任何給定順序鍵入任何內容:firstName,lastName,secondLastName或這些的組合。 例如,我的名字:
姓:毛, 名字:Ubilla, secondLastName:卡瓦哈爾,
如果我搜索「毛Ubilla卡瓦哈爾」,甚至「毛Ubilla」我希望能出現頂部結果列表。 問題是:
1-我應該如何定義這3個字段的索引?我做了以下幾點:
@Indexed
class Patient {
...
@Field(index=Index.YES, analyze=Analyze.YES, store=Store.NO)
protected String firstName = new String();
@Field(index=Index.YES, analyze=Analyze.YES, store=Store.NO)
protected String lastName = new String();
@Field(index=Index.YES, analyze=Analyze.YES, store=Store.NO)
protected String secondLastName = new String();
...
}
2-我該如何構建查詢?我這樣做:
QueryBuilder qb = fullTextSession.getSearchFactory().buildQueryBuilder().forEntity(Patient.class).get();
Query luceneQuery = qb.keyword().onFields("firstName", "lastName", "secondLastName").matching(name).createQuery();
但是,這不適合我。它沒有拋出任何異常,只是它沒有返回任何東西。 即使我只搜索「Mauricio」,它也不會返回任何內容。
但是,如果我更改查詢只符合我的姓:如果我搜索
QueryBuilder qb = fullTextSession.getSearchFactory().buildQueryBuilder().forEntity(Patient.class).get();
Query luceneQuery = qb.keyword().onFields("firstName").matching(name).createQuery();
「毛」它的工作原理。
我在做什麼錯?有什麼辦法可以爲3列定義組合索引嗎?我應該以不同的方式構建我的查詢嗎? 請幫助我順便說一句:( ,我使用Hibernate Search的4.5.1在休眠4.3和Java 1.7
謝謝獲得!這就是我所做的,它工作正常。同時感謝您對升級到更新版本hibernate的建議。好像我很快就要做。 –