Boosting Documents and Fields
setBoost(float) 設置Documents和Fields在index中的重要性
可以給document設置boost,也可以給field設置boost
設置boost會刪除原來的document然后重新建立索引
doc.setBoost();
field.setBoost();
boost是怎樣存儲到index中的,利用norms
在建立索引過程中生成的boosts會被結合在一起變成一個浮點數,然后每個文檔每個字段
都會存為一個byte。在查詢過程中,每個field的norms會被裝入內存,重新解碼為一個浮點數
即使norms在建立索引的過程中得到,我們也可以用IndexReader的setNorm方法來改變
norms會在搜索過程中消耗過多的內存
我們可以將norms關閉,Field.setOmitNorms(true),這樣有可能影響評分,但是影響效果
可以忽略
indexing dates×
DataTools.dateToString(new Date(),DateTools.Resolution.DAY);
Indexing numbers
lucene利用詞典編排來給field排序,也就是說如果有3個數:7,71,20,正常的排序是:7,20,71。但是詞典排序是:20,7,71。一個簡單和通用的方法是給數字加前綴0:007,020,071
indexing fields for sorting
field建立索引但是不分詞Field.Index.NOT_ANALYZED,字段必須存儲Integers,Floats,Strings
Field truncation
比如說你只想給一個文檔前200個字建立索引
在indexWriter的構造方法中傳遞MaxFieldLength參數
系統設定的值MaxFieldLength.UNLIMITED和MaxFieldLength.LIMITED
可以調用setMaxFieldLength()方法來修改
IndexWriter.setInfoStream(System.out) 關于合并,刪除的信息以及當maxFieldLength到達會顯示信息
Optimizing an index
索引優化只能提高搜索的速度,不會加快建立索引的速度,不進行優化也有可能獲得很好的搜索吞吐量
IndexWriter提供4個優化方法
- optimize():將index減少到一個segment,只到操作完成才返回
- optimize(int maxNumSeqments):部分優化,一般來說,index合并到最后一個segment最消耗時間,所以優化到5個segment會比優化到1個segment快
- optimize(boolean doWait):同optimize()一樣,只是當doWait為false的時候,該方法會立刻返回,合并索引操作在后臺進行
- optimize(int maxNumSegments,boolean doWait)