Lucene4.6查询时完全跳过打分,提高查询效率的实现方式

  由于索引的文件量比较大,而且应用中不需要对文档进行打分,只需要查询出所有满足条件的文档。所以需要跳过打分来提高查询效率。一开始想用ConstantScoreQuery,但是测试发现这个类虽然让所有返回的文档打分都为1.0并没有提高查询效率,因此查资料发现可以用Filter实现跳过打分,其中又以 FieldCacheTermsFilter为最佳,其缓存机制给查询的速度提升极为明显。后面有空的时候给出完整实现,这两天略忙。

核心代码:

Query query = new TermQuery(new Term("word", word));
Filter filter = new FieldCacheTermsFilter("category", category);
TotalHitCountCollector collector = new TotalHitCountCollector();
searcher.search(query, filter, collector);
int count = collector.getTotalHits();
时间: 2024-10-03 23:00:37

Lucene4.6查询时完全跳过打分,提高查询效率的实现方式的相关文章

Oracle 提高查询性能(基础)

#1,选择最有效的表名顺序 Oracle解析器总是按照从右至左的顺序处理FROM后面的表,因此FROM最右边的表将会被当做驱动表优先处理,当存在多个表关联时,应当使用记录少的表当做驱动表.如果关联的表多的话,则用交叉表作为驱动表. #2,select中避免使用'*'. #3,  减少数据库访问的次数 每当执行一条SQL语句,Oracle 需要完成大量的内部操作,象解析SQL语句,估算索引的利用率,绑定变量, 读数据块等等.由此可 见,减少访问数据库的次数,实际上是降低了数据库系统开销 #4, 用

mysql分组查询时,讲多个值合并在一行显示

mysql根据字段进行分组查询时,相同字段的数据,只会显示一个,如果要想让这个字段的所有数据,显示在一行里,可以在查询时用GROUP_CONTAT函数,默认数据合并以逗号,分开

IN 查询时出现ORA-01795:列表中的最大表达式数为1000解决方法

问题描述: SQL进行IN查询时出现:java.sql.SQLException: ORA-01795: 列表中的最大表达式数为 1000 解决办法: 问题原因是:SQL进行IN查询时,IN中的数据量不能超过1000条. 例如:select * from student where id in ('S1','S2'...........) 如果in后面数据量过多的话就会报错. 解决方法是:用 or关键字 如:select * from student where id in('S1','S2',

连接查询时on与where的区别

写在前面:在编写SQL的过程中,我经常使用LEFT JOIN关联多个小查询形成一个大查询,产生一张宽表.在进行这些查询中,给我感触最深的亮点是:1.left join中主表的选择,主表的选择很重要,否则就会漏掉一些记录或者ID:2.连接查询的ON条件和外层的WHERE条件的区分使用,如果对他们的作用以及区别有一个很清晰的认识,那么用混一条语句就可能产生很大的差别.因此,本文在学习了网友的博文的基础上进行如下总结和整理. 关键点:数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临时表,

使用hql查询时的异常:Xxx is not mapped[from Xxx where ...]

今天项目中使用hql查询时,出现    QingAoCenterInfo is not mapped[from QingAoCenterInfo where...] 显然是Hibernate映射关系出现了问题. 出现这种异常首先要查看查询语句中是否使用了数据库表中的表名,而不是实体类. 查看我的代码: centerList = manager.find("from QingAoCenterInfo center where center.type = ? and center.centerNam

Mybatis使用MySQL模糊查询时输入中文检索不到结果怎么办--转自http://www.jb51.net/article/88236.htm

这篇文章主要介绍了Mybatis使用MySQL模糊查询时输入中文检索不到结果的解决办法的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下 项目开发中,在做Mybatis动态查询时,遇到了一个问题:MySQL在进行LIKE模糊查询时,输入英文可以正常检索出结果,但是输入中文后检索得到的结果为空. 由于是使用GET方式请求,所以为了确保中文不乱码,在控制台接收到请求参数后,对中文进行了一次编码. ? 1 2 3 4 5 try { realName = new String(realNam

用SYS_CONNECT_BY_PATH进行层级查询时的排序问题

用SYS_CONNECT_BY_PATH进行层级查询时, 对同一级别的节点进行排序,可以加order SIBLINGS by 子句实现 WITH N2 AS( SELECT n.ID, org."ParentID", n."NodeName", n."Sort" FROM "Organize" org LEFT JOIN "Node" n ON n."ID"=org."Node

关于MySQL中存储类型为Float,使用jdbc查询时丢失精度,或者自动四舍五入的问题

一.   mysql表结构: member_price列的数据类型是float(20,2)(注: 表示最多20位浮点数,精度为2位) 插入记录: INSERT INTO `member_price` (`id`, `data_type`, `month`, `member_count`, `member_price`, `create_at`) VALUES ('1', '1', '2015-11', '5864', '1765910.8745120', '1450078966586'); IN

sql查询时增加自动编号

查询时加序号  a:没有主键的情形: Select   identity(int,1,1)   as   iid,*   into   #tmp   from   TableName   Select   *   from   #tmp   Drop   table   #tmp b:有主键的情形: Select   (Select   sum(1)   from   TableName   where   KeyField   <=   a.KeyField)   as   iid,*   f