Lucene Query Term Weighting

 


方法spa

 1     public static Query TermWeighting(Query tquery,Map<String,Float>term2weight){
 2         BooleanQuery nquery = new BooleanQuery();
 3         Set<Term> terms = new HashSet<Term>();
 4         tquery.extractTerms(terms);
5 for(Term itr : terms){ 6 float weight = term2weight.get(itr.text()); 7 Query q = new TermQuery(new Term(itr.field(), itr.text())); 8 q.setBoost(weight); //設置權重 9 nquery.add(q, BooleanClause.Occur.SHOULD); 10 } 11 return nquery; 12 }

傳入參數說明:code

  •     tquery:通過QueryParser解析後的Query對象
  •     term2weight:計算好或人爲設定的每一個詞的檢索權重

背景對象

近期搜索:lucene如何設置query中不一樣term權重,瀏覽了不下百個頁面和解答。blog

使用最多的搜索詞組合如標題:Lucene Query Term Weighting文檔

獲得的信息大體以下get

一、 對lucene的score公式的說明:也就是在假設query中term的tf都爲1,新的query不列入df的計算,而後推導出一個vsm下的文檔之間的cosine similarity;it

二、 lucene如何在index階段給不一樣的Document.setBoost, index或檢索階段給Filed.setBoost,以及檢索階段給Query.setBoostclass

  吐槽1: 對於剛開始接觸lucene的同窗,對Query.setBoost <--- TermQuery.setBoost時略微有些迷茫的;搜索

  吐槽2: 額外, Clause的概念讓人有些迷茫,爲什麼不直接叫QueryTerm這種呢?float

三、 對於TermWeight樹的解釋,基本同1;


 

亂入

上述都不能很好的解答個人需求,連stackoverflow中有些問答也是。

但,這跟初學者沒有熟識lucene也有關。

抑或說,是我搜索時用詞的姿式不對。

相關文章
相關標籤/搜索