全文索引工具中,都是由這樣三部分組成:數據庫
1,索引部分 2,分詞部分 3,搜索部分工具
建立索引過程:1建立directory,2建立writer(索引),3建立文檔而且添加索引 4查詢索引的基本信息 5 刪除和更新索引。spa
模糊查詢:orm
Query query=new FuzzyQuery(new Term(「name」,」make」));對象
public void index(){排序
//建立directory索引
//建立indexwriter文檔
//建立document對象get
//爲document添加fieldit
//經過indexwriter添加文檔到索引中
}
存儲域選項:
Field.Store.Yes /No
設置爲Yes表示把這個域的內容徹底存儲到文件中,方便進行文本的還原 doc.get
設置爲No表示把這個域的內容不存儲到文件中,但能夠被索引,此時內容沒法被還原。
摘要須要存儲。
索引域選項:
Field.Index
.ANALYZED:進行分詞和索引,適用於標題,內容等
.NOT_ANALYZED 進行索引,可是不進行分詞,如身份證號碼,姓名,id等,適用於精確索引
.ANALYZED_NOT_NORMS:進行分詞可是不存儲norms信息,這個norms中包括了建立索引的時間和權值等信息(評分,顯示的排序信息)
.NOT_NORMS既不進行分詞,也不存儲norms信息(不多用)
.NO不進行索引。
最佳實踐: NOT_ANALYZED_NOT_NORMS YES 標示符(主鍵,文件名),電話號碼, 身份證號碼,姓名,日期
ANALYZED YES 文檔標題和摘要
ANALYZED NO 文檔正文
NO YES 文檔類型,數據庫主鍵(不進行索引)
NOT_ANALYZED NO 隱藏關鍵字
添加索引:writer.add(doc)
更新索引|替換索引:writer.updateDocument(new Term("id","1"), doc);
從新索引:writer.deleteall();
刪除索引:writer.deleteDocuments(new Term("id","1"));
完全刪除索引:writer.forceMergeDeletes();
恢復刪除的索引:reader.undeleteAll();
查詢索引:readerxxx
域能加權,文檔不能加權:setBoost
indexreader最好創建成單例的
delete能夠用reader.deletDocument(new term(id,1))
不關閉索引能夠用writer.conmit