繁体   English   中英

Lucene NumericRangeQuery和MemoryIndex

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM