我是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);
}
}
答案 0 :(得分:0)
好的,我想出了这个。来自NumericRangeQuery
的文档匹配指定范围内的数值的查询。要使用它,必须首先使用 IntField,FloatField,LongField或DoubleField(expert: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);
}
}
解决了这个问题。