在某些情況下,使用者需要查詢一定範圍內的文件,比如時間,id等。
package com.querytype;
import org.apache.lucene.index.term;
import org.apache.lucene.search.booleanclause;
import org.apache.lucene.search.hits;
import org.apache.lucene.search.indexsearcher;
import org.apache.lucene.search.rangequery;
import org.apache.lucene.search.termquery;
public class rangequerydemo {
/*** @param args
*/public static void main(string args) {
try {
indexsearcher search = new indexsearcher("d://demo");
term t1 = new term("bookname","001");
term t2 = new term("bookname","005");
rangequery query = new rangequery(t1,t2,false);
hits hits = search.search(query);
for(int i=0;i首先為query設定乙個上屆和乙個下屆,然後設定乙個布林值,布林值表示,如果為true,那麼這兩個臨界值加入到結果中,如果為false那麼就不加到結果中。在rangequery判斷某個term是否在某一範圍內時,使用的是string的tostring方法。
由於該類的rewrite方法將對某個範圍內的查詢轉化為乙個由多個termquery組成的布林查詢,而且每個子查詢的條件都為should,所以查詢滿足的條件文件較大的時候,效能非常的低。
如果你設定的查詢的範圍超過了1024,那麼就會丟擲異常,toomanyclause就是由於地層採用的是booleanquery來查詢。
Lucene中的範圍搜尋
前兩天做有關lucene的範圍搜尋,覺得應該很簡單,因為之前做過lucene的排序。但一做就發現不那麼回事,做排序程式幾乎不需要改動,但範圍搜尋完全不同。下面就3個方面 整數,浮點數,日期 來說 前提 使用lucene1.9.1,將整數,浮點數和日期全部以如下方式建索引 newfield key,v...
Lucene中的範圍搜尋
前兩天做有關lucene的範圍搜尋,覺得應該很簡單,因為之前做過lucene的排序。但一做就發現不那麼回事,做排序程式幾乎不需要改動,但範圍搜尋完全不同。下面就3個方面 整數,浮點數,日期 來說 前提 使用lucene1.9.1,將整數,浮點數和日期全部以如下方式建索引 newfield key,v...
Lucene 搜尋方法(字首搜尋)
prefixquery是一種字首搜尋,在檢索的時候,常常需要進行某種字首查詢,例如到圖書館查詢一本書,可能只能記得書名的前面幾個字,這種情況就可以用該種搜尋模式。public static void main string args try indexsearcher search new inde...