Lucene 搜尋方法(範圍搜尋)

2021-08-31 04:17:59 字數 1060 閱讀 8374

在某些情況下,使用者需要查詢一定範圍內的文件,比如時間,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...