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