方法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
背景对象
近期搜索: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也有关。
抑或说,是我搜索时用词的姿式不对。