2012-08-22 72 views
1

我正在使用hibernate搜索(建立在Lucene之上)。我創建了索引。現在,如果我進行搜索,它是否僅從創建的索引獲取結果?我的意思是它也查詢數據庫表中的數據?hibernate搜索(Lucene + hibernate核心)如何工作?

謝謝!

+0

不確定你是否遇到過本文從Javaworld討論使用Lucene精心搜索hibernate搜索:http://www.javaworld.com/javaworld/jw-07-2008/jw-07-hibernate-search.html – Vikdor

回答

1

Hibernate Search就像使用Hibernate的項目的強大助手,它需要全文搜索功能。因此,「Hibernate Search」本身不會在數據庫中執行搜索。它只會在索引中搜索。這是Lucene集成的一部分。 Hibernate集成部分主要圍繞偵聽器,每當您對實體進行某些操作(保存,更新,刪除...)時,都會將實體索引爲文檔。

2

不,你需要創建一個Lucene查詢到對Hibernate的Search類像這樣運行:

MultiFieldQueryParser parser = new MultiFieldQueryParser(Version.LUCENE_29, searchFields, new KeywordAnalyzer()); 
org.apache.lucene.search.Query query = parser.parse("Text from entity to search for"); // Or any other valid query 
FullTextSession fullTextSession = Search.getFullTextSession(hibernateSession); 
org.hibernate.Query hibernateQuery = fullTextSession.createFullTextQuery(query, YOUR_TARGET_ENTITY_HERE.class); 
List result = hibernateQuery.list(); 

我不知道他們爲什麼叫休眠結果類Query太..

searchFields是包含要搜索的字段列表的String[]

編輯:更多解釋。

+0

:謝謝期待你的答覆。你的意思是說索引本身有數據?我的理解是,lucene只創建索引,並且如果根據索引進行任何搜索,結果將從數據庫中檢索出來?糾正我,如果我錯了。 – user1016403

+0

這取決於您的設置,您可以通過Hibernate搜索中的'@ Indexed'和'@ Field'註釋在搜索索引中包含/排除實體和字段。包含的字段將出現在搜索索引中。 (取決於'@ Field'註釋的'store'屬性,有或沒有完整的數據 – nfechner

+0

感謝您的回覆我有一個字段註釋爲:@Field(index = Index.TOKENIZED,store = Store.NO, name =「someName」)。我只索引了一個字段。現在,如果我進行搜索,是否根據創建的索引從數據庫檢索結果? – user1016403

相關問題