我在Lucene 3.0.3中有一个数字字段,它可以很好地处理范围查询.如果我们切换到TermQuery,它不会产生任何结果.例如:
Document doc = new Document();
String name = "geolongitude";
NumericField numericField = new NumericField(name);
double value = 29.0753505;
String valueAsString = "29.0753505";
numericField.setDoubleValue(value);
doc.add(numericField);
indexWriter.addDocument(doc);
indexWriter.commit();
indexWriter.close();
IndexSearcher indexSearcher = new IndexSearcher(open);
Query termQ = new TermQuery(new Term(name, valueAsString));
TopDocs search = indexSearcher.search(termQ, 10);
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我得不到任何结果.我试图找出是否存在任何"NumericTermQuery",但无法找到.我可以做一些棘手的事情(对我正在搜索的术语进行范围查询)但我不喜欢这个解决方案.
谢谢!
数字字段未编入纯文本术语索引,因此将字符串表示形式作为术语进行搜索将不起作用.
无论喜欢与否,构建一个NumericRangeQuerymin = max 的地方确实是正确的方法:
Query query = NumericRangeQuery.newDoubleRange(name, value, value, true, true);
Run Code Online (Sandbox Code Playgroud)
实施NumericRangeQuery明确承认这种情况下,实际上,并且被设计为应付自如.
| 归档时间: |
|
| 查看次数: |
1599 次 |
| 最近记录: |