2014-01-30 34 views
0

从Lucene.Net 2.3.1.3升级到2.9.4.1后,RangeQuery不再有效。我试过NumericRangeQuery和TermRangeQuery,但没有运气。 RangeQuery在一个范围内搜索Long值(例如 - [4000至5000]应该找到4500)。Rangequery不再适用于Lucene 2.9.4.1

下面是代码:

private static Query BuildNumericRangeQuery(NumericRangeSearchParam.NumericRangeField range) 
    { 
     var startTerm = new Term(range.FieldName, NumberTools.LongToString(range.Start)); 
     var endTerm = new Term(range.FieldName, NumberTools.LongToString(range.End)); 
     return new RangeQuery(startTerm, endTerm, true); 
    } 

其他人遇到了同样的问题?任何有识之士将不胜感激!

+0

RangeQuery已弃用;重写您的查询来替代使用TermRangeQuery或NumericRangeQuery。 http://lucene.apache.org/core/2_9_4/api/all/org/apache/lucene/search/RangeQuery.html – sisve

+0

我尝试了NumericRangeQuery和TermRangeQuery都没有结果。我确实发现数据被填充为10个字符,如下所示: var transformation =(int)Math.Floor(rating * 1000); var result = ToLexographical(transformation,10); ...以0000004500为例。 –

+0

是的,并且在索引期间也应用相同的填充,对吗? – sisve

回答

1

的问题涉及到索引履带填充数据为10个字符以下各项:

var transformation = (int) Math.Floor(rating*1000); 
var result = ToLexographical(transformation, 10); //which results in 0000004500 as an example. 

我把它改为ToLexographical(改造,4),这导致了4个字符的字符串(如 - 4500 )。不知道这是如何工作的,因为[4000到5000]在技术上不应该找到带有Lexographic订购的0000004500。