資源簡介
lucene執行的兩個主要步驟如下
1、建立索引的執行過程
在建立索引時,先要把文檔存到索引庫中,還要更新詞匯表。
操作步驟如下:
(1)、把數據對象轉換成相應的Document,其中的屬性轉為Field;
(2)、調用工具IndexWriter的addDocument(doc),把Document添加到索引庫中;
(3)、Lucene做的操作:
把文檔存到索引庫中,并自動指定一個內部編號,用來唯一標識這個條數據;內部編號類似與這條數據的地址,在索引庫內部的數據進行調整后,這個編號就可能會改變,同時詞匯表中的引用的編號也會做相應的改變,以保 證正確。
更新詞匯表。把文本中的詞找出來放到詞匯表中,簡歷與文檔的對應關系。要把那些詞放到詞匯表中呢?這就用到一個叫Analyzer(分詞器)的工具。他的作用是把一段文本中的詞按照規則取出所包含的所有詞。對應的是Analyzer類,這是一個抽象類,切分詞的具體規則是由其子類實現。
在把對象的屬性轉化為 Field時,相關代碼為:
doc.add(new Field(“title”,article.getTitle(), Store.YES, Index.Analyzed))
其中第三個參數的意思為
Store.NO 不存儲屬性的值;
Store.YES 存儲屬性的值
第四個參數
Index.NO 不建立索引
Index.ANALYZED 分詞后建立索引
Index.NOT_ANALYZED 不分詞,把整個內容作為一個詞建立索引
Store是影響搜索出的結構是否有指定屬性的原始內容。
Index是影響是否可以從這個屬性中查詢,或者是查詢時可以查其中的某些詞,還是要把整個內容作為一個詞進行查詢。
2、從索引庫中搜索的執行過程(QueryParse、TopDocs、ScoreDoc)
在進行搜索時,先在詞匯表中查找,得到符合條件的文檔編號列表。再根據文檔編號真正的取數據(Document)
操作步驟如下:
(1)、把要查詢字符串轉為Query對象。這就像在Hiberante總是用HQL查詢時,也要先調用Session.createQuery(hql)轉成Hibernate的Query對象一樣。把查詢字符串轉換成Query是使用QueryParser,或者使用MultiFieldQueryParser。查詢字符串也要先經過Analyzer(分詞器)。要求檢索時使用Analyzer要與監理索引使用的Analzyer要一致,否則可能搜索不出正確的結果。
(2)、調用IndexSearcher.search(),進行查詢,得到結果。此方法返回未TopDocs,是包含結果的多個信息的一個對象。其中有totalHits代表記錄數,ScoreDoc的數組。ScoreDoc是代表一個結果的相關度得分與文檔編號等信息的對象。
(3)、取出要用到的數據列表。調用IndexSearcher.doc(scoreDoc.doc)以取出指定編號對應的Document數據,在分頁時要用到:一次只取一頁的數據。
代碼片段和文件信息
/**
?*?文件名 :DataUtil.java
?*?創建日期 :2012-12-20
?*?Copyright?(c)?2003-2012?個人版權所有
?*?All?rights?reserved.
?*/
package?com.lucene.c01;
import?java.util.ArrayList;
import?java.util.Date;
import?java.util.List;
import?com.lucene.po.User;
/**
?*?生成測試數據
?*?
?*?@version?1.00
?*?@author?文超
?*?
?*/
public?class?DataUtil?{
/**
?*?檢索資源數據的準備;
?*???這里的數據可以來源數據庫、文件系統等
?*?@return
?*/
public?static?List?getUsers(){
List?list?=new?ArrayList();
User?user?=new?User(1L“張三1“20“man“new?Date());
list.add(user);
user?=new?User(2L“張三2“20“man“new?Date());
list.add(user);
user?=new?User(3L“張三3“20“woman“new?Date());
list.add(user);
user?=new?User(4L“張三4“20“man“new?Date());
list.add(user);
user?=new?User(5L“張三5“20“ma
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????????962??2012-12-20?14:02??lucene\.classpath
?????文件???????1039??2012-12-20?13:50??lucene\.project
?????文件????????503??2012-12-20?13:50??lucene\.settings\.jsdtscope
?????文件????????395??2012-12-20?13:50??lucene\.settings\org.eclipse.jdt.core.prefs
?????文件????????523??2012-12-20?13:50??lucene\.settings\org.eclipse.wst.common.component
?????文件????????345??2012-12-20?13:50??lucene\.settings\org.eclipse.wst.common.project.facet.core.xm
?????文件?????????49??2012-12-20?13:50??lucene\.settings\org.eclipse.wst.jsdt.ui.superType.container
?????文件??????????6??2012-12-20?13:50??lucene\.settings\org.eclipse.wst.jsdt.ui.superType.name
?????文件???????1871??2012-12-20?15:47??lucene\build\classes\com\lucene\c01\DataUtil.class
?????文件???????4315??2012-12-20?16:02??lucene\build\classes\com\lucene\c01\IndexWriterDemo.class
?????文件???????2213??2012-12-20?15:20??lucene\build\classes\com\lucene\c01\TestIndexWriterFSDirectory.class
?????文件???????2110??2012-12-20?16:08??lucene\build\classes\com\lucene\c01\TestIndexWriterRAMDirectory.class
?????文件???????1560??2012-12-20?14:07??lucene\build\classes\com\lucene\po\User.class
?????文件???????1323??2012-12-20?15:47??lucene\src\com\lucene\c01\DataUtil.java
?????文件???????2305??2012-12-20?16:02??lucene\src\com\lucene\c01\IndexWriterDemo.java
?????文件???????1154??2012-12-20?14:07??lucene\src\com\lucene\po\User.java
?????文件???????1448??2012-12-20?15:20??lucene\test\com\lucene\c01\TestIndexWriterFSDirectory.java
?????文件???????1399??2012-12-20?16:08??lucene\test\com\lucene\c01\TestIndexWriterRAMDirectory.java
?????文件?????????39??2012-12-20?13:50??lucene\WebContent\me
?????文件????1537988??2012-12-20?13:54??lucene\WebContent\WEB-INF\lib\lucene-core-3.6.1.jar
?????文件????????711??2012-12-20?13:50??lucene\WebContent\WEB-INF\web.xm
?????目錄??????????0??2012-12-20?14:38??lucene\build\classes\com\lucene\c01
?????目錄??????????0??2012-12-20?14:05??lucene\build\classes\com\lucene\po
?????目錄??????????0??2012-12-20?14:05??lucene\build\classes\com\lucene
?????目錄??????????0??2012-12-20?14:07??lucene\src\com\lucene\c01
?????目錄??????????0??2012-12-20?14:05??lucene\src\com\lucene\po
?????目錄??????????0??2012-12-20?14:38??lucene\test\com\lucene\c01
?????目錄??????????0??2012-12-20?14:02??lucene\build\classes\com
?????目錄??????????0??2012-12-20?14:05??lucene\src\com\lucene
?????目錄??????????0??2012-12-20?14:02??lucene\test\com\lucene
............此處省略15個文件信息
- 上一篇:java lucene搜索 常用
- 下一篇:elasticsearch的java使用
評論
共有 條評論