[英]Lucene NumericRangeQuery and MemoryIndex
我是Lucene的新手,正在尝试一些琐碎的用例。 我无法获得依赖NumericRange的单元测试,该测试断言要成功通过范围匹配。 我究竟做错了什么。
public class MemoryIndexTest {
private static final String DATE_FIELD = "date";
MemoryIndex index = new MemoryIndex();
@Before
public void init() {
index.addField(DATE_FIELD, index.keywordTokenStream(Arrays.asList(20141116)));
}
@Test
public void testRange(){
Query query = NumericRangeQuery.newIntRange(DATE_FIELD, 20141115, 20141118, true, true);
assertTrue(index.search(query) > 0);
}
}
好吧,我想出了这个。 从NumericRangeQuery的文档中
与指定范围内的数值匹配的查询。 要使用此功能,必须首先使用IntField,FloatField,LongField或DoubleField(专家:NumericTokenStream)对数值进行索引。 如果您的用词是文字形式,则应使用TermRangeQuery。 NumericRangeFilter是此查询的过滤器等效项。
这里的关键是对于MemoryIndex,必须使用NumericTokenStream。 所以修改我的测试以将字段索引为
public class MemoryIndexTest {
private static final String DATE_FIELD = "date";
MemoryIndex index = new MemoryIndex();
NumericTokenStream numericTokenStream = new NumericTokenStream();
@Before
public void init() {
index.addField(DATE_FIELD, numericTokenStream.setIntValue(20141116));
}
@Test
public void testRange() {
Query query = NumericRangeQuery.newIntRange(DATE_FIELD, 20141115, 20141118, true, true);
assertTrue(index.search(query) > 0);
}
}
解决了这个问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.