我正在使用Lucene 6 new IntPoint
,我想进行一些范围搜索
使用IntPoint.newRangeQuery
进行搜索并返回正确的文档,但是,当我使用QueryParser
(经典)或新的StandardQueryParser
时,不会返回任何内容。
// 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]
这是错误还是我错过了什么?
最佳答案
这不是一个错误,我不会说您确实错过了任何东西。 QueryParser不支持IntPoint字段或任何其他数字(PointValues)字段类型。使用QueryParser语法的范围查询将始终生成TermRangeQuery
,它将根据倒排索引中的字典顺序搜索该字段,这不适用于搜索PointValues字段。使用IntPoint.newRangeQuery
和类似方法生成这些是正确的事情。
关于java - Apache Lucene 6 QueryParser范围查询不适用于IntPoint,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45516870/