当前位置: 首页 > 知识库问答 >
问题:

Apache Lucene 6 QueryParser范围查询无法使用IntPoint

夹谷苗宣
2023-03-14

我正在使用Lucene 6 newIntPoint,我想做一些范围搜索

使用IntPoint.newRangeQuery搜索工作,并返回正确的文档,但是当我使用QueryParser(经典)或新的Standard>QueryParser时,不会返回任何内容。

// This works
Query query =  IntPoint.newRangeQuery("duration",1,20);
System.out.println(query);

//This doesn't work
QueryParser parser = new QueryParser("name", analyzer);
Query query = parser.parse("duration:[1 TO 20]");
System.out.println(query);

//This doesn't work
StandardQueryParser queryParserHelper = new StandardQueryParser();
Query query = queryParserHelper.parse("timestamp:[1 TO 20]", "timestamp");
System.out.println(query);



// In all 3 cases it prints: timestamp:[1 TO 20]

这是窃听器还是我漏掉了什么?

共有1个答案

唐照
2023-03-14

这不是一个错误,我不会说你遗漏了什么,真的。QueryParser不支持IntPoint字段或任何其他数字(PointValue)字段类型。QueryParser语法中的范围查询将始终生成一个TermRangeQuery,该查询将根据倒排索引中的词典顺序搜索该字段,这不适用于搜索PointValue字段。使用IntPoint生成这些。newRangeQuery和类似的方法是正确的做法。

 类似资料:
  • 可以对模型的查询和写入操作进行封装,例如: <?php namespace app\index\model; use think\Model; class User extends Model { public function scopeThinkphp($query) { $query->where('name','thinkphp')->field('i

  • MySQL 提供了  BETWEEN AND 关键字,用来判断字段的数值是否在指定范围内。 BETWEEN AND 需要两个参数,即范围的起始值和终止值。如果字段值在指定的范围内,则这些记录被返回。如果不在指定范围内,则不会被返回。 使用 BETWEEN AND 的基本语法格式如下: [NOT] BETWEEN 取值1 AND 取值2 其中: NOT:可选参数,表示指定范围之外的值。如果字段值不满

  • 我正在通过FluentCassandra和C#访问Cassandra1.2。我使用了DataStax安装包。问题是我无法执行下面显示的范围查询。 我尝试了以下创建表的方法: 我的ConnectionBuilder: 我该怎么做?

  • 问题内容: 如何在SQLite中高效地执行简单范围查询? 说,我有保存个人信息的数据,我想找到年龄在20到45岁之间,体重在50到80公斤之间的人? 我应该怎么做(例如设置某些索引?)以提高搜索效率? 问题答案: 我会尝试像 对“年龄”和“体重”字段建立索引将有助于加快查询速度。 这是有关在SQLite中建立索引的很好的概述:http : //www.tutorialspoint.com/sqli

  • 使用DynamoDB,没有简单的方法可以对列执行索引范围查询。主键、本地二级索引和全局二级索引都需要分区键来进行范围查询。 例如,假设我有一个带有数字分数属性的高分表。使用索引范围查询无法获得前10名或前25至50名 那么,执行这项极其常见的任务的惯用方式或首选方式是什么呢? > 接受表格扫描。 使用静态分区键并利用分区查询。 使用固定数量的静态分区键并使用多个分区查询。

  • 我的文档中有一个日期范围(使用日期对象)如下所示 我试图弄清楚如何构建一个查询来返回包含特定日期的所有事件,例如,像.... 如果查询显示类似这样的内容,但在Firestore查询限制下可能不可能出现这种情况。 因此,我一直在挠头几个小时,要么为此构建一个查询,要么以某种方式结构我的数据,以允许这样做。 这有可能吗?