Lucene queryParser 正确构建查询但搜索不起作用
Lucene queryParser builds the query correctly but search doesn't wrok
我已经使用 lucene 为 IntPointField 建立了索引,我可以使用以下查询获取它:
Query query = IntPoint.newRangeQuery("field1", 0, 40);
TopDocs topDocs = searcher.search(query);
System.out.println(topDocs.totalHits);
它正在正确获取相关信息。
如果我使用解析构建查询,它不起作用
Query query = new QueryParser(Version.LUCENE_8_11_0.toString(), new StandardAnalyzer()).parse("field1:[0 TO 40]");
我检查了两个查询的字符串表示,它们看起来完全相同,如下所示
field1:[0 TO 40]
有谁知道我做错了什么吗?
IntPoint 字段需要自定义查询解析器。
下面解决问题
StandardQueryParser parser = new StandardQueryParser();
parser.setAnalyzer(new StandardAnalyzer());
PointsConfig indexableFields = new PointsConfig(new DecimalFormat(), Integer.class);
Map<String, PointsConfig> indexableFieldMap = new HashMap<>();
pointsConfigMap.put("field1", indexableFields);
parser.setPointsConfigMap(indexableFieldMap);
我已经使用 lucene 为 IntPointField 建立了索引,我可以使用以下查询获取它:
Query query = IntPoint.newRangeQuery("field1", 0, 40);
TopDocs topDocs = searcher.search(query);
System.out.println(topDocs.totalHits);
它正在正确获取相关信息。
如果我使用解析构建查询,它不起作用
Query query = new QueryParser(Version.LUCENE_8_11_0.toString(), new StandardAnalyzer()).parse("field1:[0 TO 40]");
我检查了两个查询的字符串表示,它们看起来完全相同,如下所示
field1:[0 TO 40]
有谁知道我做错了什么吗?
IntPoint 字段需要自定义查询解析器。 下面解决问题
StandardQueryParser parser = new StandardQueryParser();
parser.setAnalyzer(new StandardAnalyzer());
PointsConfig indexableFields = new PointsConfig(new DecimalFormat(), Integer.class);
Map<String, PointsConfig> indexableFieldMap = new HashMap<>();
pointsConfigMap.put("field1", indexableFields);
parser.setPointsConfigMap(indexableFieldMap);