簡體   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