2017-08-04 76 views
1

我使用Lucene 6個新IntPoint工作,我想要做一些範圍搜索的Apache Lucene的6 QueryParser的範圍查詢未與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] 

這是一個錯誤還是我錯過了什麼?

回答

2

這不是一個錯誤,我不會說你錯過了什麼,真的。 QueryParser不支持IntPoint字段或任何其他數字(PointValues)字段類型。 QueryParser語法中的範圍查詢將始終生成一個TermRangeQuery,它將根據倒排索引中的詞典順序來搜索該字段,這不適用於搜索PointValues字段。使用IntPoint.newRangeQuery和類似的方法生成這些是正確的。