Lucene Query Term Weighting

 


方法

 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 }

传入参数说明:

  •     tquery:经过QueryParser解析后的Query对象
  •     term2weight:计算好或人为设定的每个词的检索权重

背景

近期搜索:lucene如何设置query中不同term权重,浏览了不下百个页面和解答。

使用最多的搜索词组合如标题:Lucene Query Term Weighting

得到的信息大致如下

1、 对lucene的score公式的说明:也就是在假设query中term的tf都为1,新的query不列入df的计算,然后推导出一个vsm下的文档之间的cosine similarity;

2、 lucene如何在index阶段给不同的Document.setBoost, index或检索阶段给Filed.setBoost,以及检索阶段给Query.setBoost

  吐槽1: 对于刚开始接触lucene的同学,对Query.setBoost <--- TermQuery.setBoost时略微有些迷茫的;

  吐槽2: 额外, Clause的概念让人有些迷茫,为何不直接叫QueryTerm这种呢?

3、 对于TermWeight树的解释,基本同1;


 

乱入

上述都不能很好的解答我的需求,连stackoverflow中有些问答也是。

但,这跟初学者没有熟识lucene也有关。

抑或说,是我搜索时用词的姿势不对。

 

转载于:https://www.cnblogs.com/25-to-life/p/4652787.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值