• 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也有关。

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

  • 相关阅读:
    NOKIA自己掌控的新的智能手机系统ASHA
    NOKIA自己掌控的新的智能手机系统ASHA
    双系统启动菜单修复工具(NTBootAutofix)v2.5.7 绿色版
    双系统启动菜单修复工具(NTBootAutofix)v2.5.7 绿色版
    如何用ghost安装双系统(WinXP+Win7)
    摄影还能这么玩!Jamie Beck创意GIF摄影
    线程知识结构概览
    window多线程操作文件
    多线程内存的表现形式
    进程的调度的理解
  • 原文地址:https://www.cnblogs.com/25-to-life/p/4652787.html
Copyright © 2020-2023  润新知