當用solr或者lucene搜尋的時候,如果想對不同型別的文章,或者不同的字段設定不同的權重,又或者對不同的搜尋詞語設定不同權重,則需要boost功能。
1、boost設定方法
在索引時候設定boost,會消耗額外的記憶體;在查詢的時候設定boost,會消耗cpu。
索引的時候,boost值是寫入索引檔案的,儲存在標準化因子(.nrm)檔案中,一旦設定,除非刪除此文件,或者重寫記錄,否則無法改變。所以在查詢的時候設定boost會更靈活。
不設定的時候,預設boost為1.0。
solr以lucene為基礎的,二者的boost是基本一樣的,下面以lucene為例來說。
//lucene索引的時候設定boost
document doc = new document();
field f = new field("contents", "hello world", field.store.no, field.index.analyzed);
f.setboost(100);//對某個字段設定權重
doc.add(f);
doc.setboost(100);//對文件設定權重
//solrj索引的時候設定boost
doc.addfield("title","中華",1.0f);即是title域的boost
doc.setdocumentboost(10.0f);就是doc的boost
//查詢的時候設定boost
比如:title:人民^10 表示title中匹配「人民」的記錄,需要公升高權重
2、boost設定原理
那麼boost是如何影響lucene得分的呢?
lucene 得分公式如下:
score(q,d) =coord(q,d) querynorm(q) ∑( tf(t in d) · idf(t)2 · t.getboost() · norm(t,d) )t in q
其中:t:term,乙個查詢詞,這裡的term是指包含域資訊的term,也即title:hello和content:hello是不同的term
d:doc,乙個文件
f:field
coord(q,d):一次搜尋可能包含多個搜尋詞,而一篇文件中也可能包含多個搜尋詞,此項表示,當一篇文件中包含的搜尋詞越多,則此文件則打分越高。
querynorm(q):計算每個查詢條目的方差和,此值並不影響排序,而僅僅使得不同的query之間的分數可以比較。其公式是:
public float querynorm(float sumofsquaredweights) ,而
public float sumofsquaredweights()
tf(t in d):term t在文件d中出現的詞頻
idf(t):term t在幾篇文件中出現過
norm(t,d) = doc.getboost() · lengthnorm(field) · ∏field.getboost()
field f in d
norm(t,d)包括三個引數(都可以在自己的similarity中影響打分,需要自己實現similarity):
document boost:此值越大,說明此文件越重要。
field boost:此域越大,說明此域越重要。
lengthnorm(field) = (1.0 / math.sqrt(numterms)):乙個域中包含的term總數越多,也即文件越長,此值越小,文件越短,此值越大。
各類boost值:
t.getboost():term的boost,查詢語句中每個詞的權重,可以在查詢中設定某個詞更加重要,common^4 hello
d.getboost():doc的boost,文件權重,在索引階段寫入nrm檔案,表明某些文件比其他文件更重要。
f.getboost():field的boost,域的權重,在索引階段寫入nrm檔案,表明某些域比其他的域更重要。
當然,也可以在新增field的時候,設定field.index.analyzed_no_norms或field.index.not_analyzed_no_norms,完全不用norm,來節約空間。
沒有norms意味著索引階段禁用了文件boost和域的boost及長度標準化。好處在於節省記憶體,不用在搜尋階段為索引中的每篇文件的每個域都占用乙個位元組來儲存norms資訊了。
但是對norms資訊的禁用是必須全部域都禁用的,一旦有乙個域不禁用,則其他禁用的域也會存放預設的norms值。因為為了加快norms的搜尋速度,lucene是根據文件號乘以每篇文件的norms資訊所占用的大小來計算偏移量的,中間少一篇文件,偏移量將無法計算。也即norms資訊要麼都儲存,要麼都不儲存。
linux網路原理及基礎設定
使用ifconfig命令維護網路 使用ifup和ifdow命令啟動和停止網絡卡 掌握ifup命令的功能 啟動系統上指定的網絡卡。掌握ifdown命令的功能 停止系統上指定的網絡卡。使用rpm安裝及移除軟體 rpm的檔名分為5部分,其中 第1部分是name,表示這個rpm軟體包的名稱 第2部分是ver...
ubuntu下DNS原理及相關設定
1.dns原理分析如下 dns服務的工作過程 1 在瀏覽器中輸入www.qq.com網域名稱,作業系統會先檢查自己本地的hosts檔案是否有這個 對映關係,如果有,就先呼叫這個ip位址對映,完成網域名稱解析。2 如果hosts裡沒有這個網域名稱的對映,則查詢本地dns解析器快取,是否有這個 對映關係...
drf框架中認證與許可權工作原理及設定
工作原理 前台對於使用者資訊進行的判斷 1 如果前台沒有攜帶認證資訊,直接定義為遊客 2 如果前台攜帶了認證資訊並認證通過,定位為登入使用者,將登入的使用者user物件儲存在 requset.user 中 3 如果前台攜帶了認證資訊但沒有認證通過,一般都定義為遊客 4 可以自定義為非法使用者,丟擲 ...