方法

     public static Query TermWeighting(Query tquery,Map<String,Float>term2weight){
BooleanQuery nquery = new BooleanQuery();
Set<Term> terms = new HashSet<Term>();
tquery.extractTerms(terms);
for(Term itr : terms){
float weight = term2weight.get(itr.text());
Query q = new TermQuery(new Term(itr.field(), itr.text()));
q.setBoost(weight); //设置权重
nquery.add(q, BooleanClause.Occur.SHOULD);
}
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也有关。

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

Lucene Query Term Weighting的更多相关文章

  1. Term Weighting

    对文本分词后,接下来需要对分词后的每个term计算一个权重,重要的term应该给与更高的权重.举例来说,“什么产品对减肥帮助最大?”的term weighting结果可能是: “什么 0.1,产品 0 ...

  2. lucene query

    在lucene的搜索中,最重要的无疑就是对query的理解和掌握了.这里扒拉一下源码(版本3.5.0)的query和query实现: query是一个抽象类,实现类有以下几个: termQuery m ...

  3. Lucene Query In Kibana

    1. Terms 一个查询由词条与操作组成.词条可以是单词,或者短语. hello #单独项 "hello pzdn" #双引号引起来短语 2. Field Lucene 支持字段 ...

  4. 使用lucene query的CharFilter 去掉字符中的script脚本和html标签

    1.准备数据,这里我从数据库读取一个带有html标签和script脚本的数据

  5. lucene 3.0.2 search 各种各样的Query类型

    http://blog.sina.com.cn/s/blog_61d2047c010195mo.html     lucene的这种各种各样的查询类型 1.TermQuery       最简单的Qu ...

  6. Elasticsearch 5.x 关于term query和match query的认识

    http://blog.csdn.net/yangwenbo214/article/details/54142786 一.基本情况 前言:term query和match query牵扯的东西比较多, ...

  7. lucene自定义过滤器

    先介绍下查询与过滤的区别和联系,其实查询(各种Query)和过滤(各种Filter)之间非常相似,可以这样说只要用Query能完成的事,用过滤也都可以完成,它们之间可以相互转换,最大的区别就是使用过滤 ...

  8. 全文检索解决方案(lucene工具类以及sphinx相关资料)

    介绍两种全文检索的技术. 1.  lucene+ 中文分词(IK) 关于lucene的原理,在这里可以得到很好的学习. http://www.blogjava.net/zhyiwww/archive/ ...

  9. Apache Lucene(全文检索引擎)—搜索

    目录 返回目录:http://www.cnblogs.com/hanyinglong/p/5464604.html 本项目Demo已上传GitHub,欢迎大家fork下载学习:https://gith ...

随机推荐

  1. Java多线程5:线程等待与唤醒

    原文:http://www.cnblogs.com/skywang12345/p/3479224.html wait(),notify(), notifyAll()等方法介绍在Object.java中 ...

  2. PHP中该怎样防止SQL注入?

    因为用户的输入可能是这样的: ? 1 value'); DROP TABLE table;-- 那么SQL查询将变成如下: ? 1 INSERT INTO `table` (`column`) VAL ...

  3. 聊聊HTTPS和SSL/TLS协议 分类: 计算机网络 2015-07-11 21:41 4人阅读 评论(0) 收藏

    要说清楚 HTTPS 协议的实现原理,至少需要如下几个背景知识. 1. 大致了解几个基本术语(HTTPS.SSL.TLS)的含义 2. 大致了解 HTTP 和 TCP 的关系(尤其是"短连接 ...

  4. Sublime Text3中文乱码及tabs中文方块的解决方案

    一.文本出现中文乱码问题 方案1 1.打开Sublime Text 3,按Ctrl+-打开控制行,复制粘贴以下python代码,然后回车运行. 2. 复制并粘贴如下代码: import urllib. ...

  5. JVM参数配置

    JVM参数配置 设置堆大小 -Xms 初始堆大小 -Xmx 最大堆大小 -Xmn 设置年轻代大小 设置每个线程堆栈大小 -Xss 设置每个线程的堆栈大小 设置年轻代大小 -XX:NewSize= -X ...

  6. 1287. Mars Canals(DP)

    1287 水DP #include <iostream> #include<cstdio> #include<cstring> #include<algori ...

  7. sdut 2351 In Danger (找规律)

    题目:http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2351 题意:xyez, xy表示一个十进 ...

  8. Json转译

    public string ListToJson<T>(IList<T> list, string jsonName) { StringBuilder Json = new S ...

  9. Jqgrid demo-史上最强大,没有之一

            为了大家能够更好的学习和使用Jqgrid网格插件,我决定用Strtus2+Spring+hibernate+Jquery+Jqgrid实现一个Jqgrid网格插件的demo.当然官方网 ...

  10. POJ 3352 Road Construction(边双连通分量,桥,tarjan)

    题解转自http://blog.csdn.net/lyy289065406/article/details/6762370   文中部分思路或定义模糊,重写的红色部分为修改过的. 大致题意: 某个企业 ...