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