Lucene Query Term Weighting
方法
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的更多相关文章
- Term Weighting
对文本分词后,接下来需要对分词后的每个term计算一个权重,重要的term应该给与更高的权重.举例来说,“什么产品对减肥帮助最大?”的term weighting结果可能是: “什么 0.1,产品 0 ...
- lucene query
在lucene的搜索中,最重要的无疑就是对query的理解和掌握了.这里扒拉一下源码(版本3.5.0)的query和query实现: query是一个抽象类,实现类有以下几个: termQuery m ...
- Lucene Query In Kibana
1. Terms 一个查询由词条与操作组成.词条可以是单词,或者短语. hello #单独项 "hello pzdn" #双引号引起来短语 2. Field Lucene 支持字段 ...
- 使用lucene query的CharFilter 去掉字符中的script脚本和html标签
1.准备数据,这里我从数据库读取一个带有html标签和script脚本的数据
- lucene 3.0.2 search 各种各样的Query类型
http://blog.sina.com.cn/s/blog_61d2047c010195mo.html lucene的这种各种各样的查询类型 1.TermQuery 最简单的Qu ...
- Elasticsearch 5.x 关于term query和match query的认识
http://blog.csdn.net/yangwenbo214/article/details/54142786 一.基本情况 前言:term query和match query牵扯的东西比较多, ...
- lucene自定义过滤器
先介绍下查询与过滤的区别和联系,其实查询(各种Query)和过滤(各种Filter)之间非常相似,可以这样说只要用Query能完成的事,用过滤也都可以完成,它们之间可以相互转换,最大的区别就是使用过滤 ...
- 全文检索解决方案(lucene工具类以及sphinx相关资料)
介绍两种全文检索的技术. 1. lucene+ 中文分词(IK) 关于lucene的原理,在这里可以得到很好的学习. http://www.blogjava.net/zhyiwww/archive/ ...
- Apache Lucene(全文检索引擎)—搜索
目录 返回目录:http://www.cnblogs.com/hanyinglong/p/5464604.html 本项目Demo已上传GitHub,欢迎大家fork下载学习:https://gith ...
随机推荐
- Linux下禁用、启用SeLinux
一些Linux默认都是启用SeLinux的,在安装操作系统的时候我们可以选择开启或者关闭SeLinux,但是在安装完系统之后又如何开启与关闭呢? 在/etc/sysconf下有一个SeLinux文件, ...
- KMP算法的C++实现
这个问题阮一峰老师讲的很清楚,链接 这里我只贴一下我的C++实现代码: #include <iostream> #include <cstring> #include < ...
- [原创]使用命令行工具提升cocos2d-x开发效率(一)之TexturePacker篇
TexturePacker是一个常用的制作sprite sheet的工具,它提供了很多实用的功能. 一般我们制作sprite sheet都是使用他的gui版本,纯手工操作,就像下面这张图示的一样. 刚 ...
- IS_ERR、PTR_ERR、ERR_PTR
最近在使用filp_open打开文件时遇到到一个问题,当打开一个并不存在的文件时,filp_open返回值值为0xfffffffe,而并不是0(NULL),这是因为内核对返回指针的函数做了特殊处理.内 ...
- 好!recover-binary-search-tree(难)& 两种好的空间O(n)解法 & 空间O(1)解法
https://leetcode.com/mockinterview/session/result/xyc51it/https://leetcode.com/problems/recover-bina ...
- poj 3792 Area of Polycubes (简单模拟)
题目 题意:在三维坐标系中,给定n个立方体的中心坐标,立方体的边长为1,按照输入顺序,后来输入的必须和之前输入的立方体有公共的边. 而且,不能和之前输入的立方体相同. 如果满足条件,输出表面积.如果不 ...
- ios tweak之binary not signed (use ldid -S)问题解决
参考tweak教程写了个简单的tweak,无奈完全无效果,摸索了好长时间才找到方法: 打开terminal ssh root@192.168.1.100 vim /var/log/syslog 找到如 ...
- Java [Leetcode 303]Range Sum Query - Immutable
题目描述: Given an integer array nums, find the sum of the elements between indices i and j (i ≤ j), inc ...
- <摘录>PS和TS流的区别
在 MPEG-2系统中,信息复合/分离的过程称为系统复接/分接,由视频,音频的ES流和辅助数据复接生成的用于实际传输的标准信息流称为MPEG-2传送 流(TS:TransportStream).据传输 ...
- linux 安装oracle 11g
安装环境 Linux服务器:SuSe10 sp2 64位 Oracle服务器:Oracle11gR2 64位 系统要求 Linux安装Oracle系统要求 系统要求 说明 内存 必须高于1G的物理内存 ...