Lucene查询索引的例子
程序员文章站
2022-07-09 09:33:54
...
package com.javaeye.tonybo2006.lucene.test;
import java.io.IOException;
import java.util.Date;
import org.apache.lucene.analysis.*;
import org.apache.lucene.index.*;
import org.apache.lucene.queryParser.*;
import org.apache.lucene.search.*;
/**
* @author tonybo2006
*
*/
public class TextFileSearcher {
private String indexFilePath = null;
public TextFileSearcher(String indexFilePath) {
this.indexFilePath = indexFilePath;
}
/**
* @return StandardAnalyzer
*/
private Analyzer getAnalyzer() {
return new StandardAnalyzer();
}
/**
* TermQuery可以用“field:key”方式,例如“content:lucene”。
* BooleanQuery中‘与’用‘+’,‘或’用‘-’,例如“content:java contenterl”。
* WildcardQuery仍然用‘?’和‘*’,例如“content:use*”。
* PhraseQuery用‘~’,例如“content:"中日"~5”。
* PrefixQuery用‘*’,例如“中*”。
* FuzzyQuery用‘~’,例如“content: wuzza ~”。
* RangeQuery用‘[]’或‘{}’,前者表示闭区间,后者表示开区间,例如“time:[20060101 TO 20060130]”,注意TO区分大小写。
* @param queryString
* @return
*/
public int queryByQueryParser(String queryString) {
int intRecords = 0;
IndexSearcher isearcher = null;
try {
isearcher = new IndexSearcher(indexFilePath);
TopDocCollector collector = new TopDocCollector(10); // 启用这个
QueryParser parser = new QueryParser("title",getAnalyzer());
Query query = parser.parse("+(contents:" + queryString + ")+modified:[200811140000 TO 200811149999]");
long startTime = new Date().getTime();
System.out.println("开始查询……");
isearcher.search(query, collector);
// 测试一下查询的时间
long endTime = new Date().getTime();
ScoreDoc[] scoreDoc = collector.topDocs().scoreDocs; // 拿到结果
intRecords = scoreDoc.length;
int docId = 0;
for (int i = 0; i < intRecords; i++) {
docId = scoreDoc[i].doc; // 一个内部编号
isearcher.doc(docId); // 通过编号,拿到文档
System.out.println("第" + (i + 1) + "条数据,包含在File:"
+ isearcher.doc(docId).get("path"));
System.out.println("第" + (i + 1) + "条数据,修改时间:"
+ isearcher.doc(docId).get("modified"));
}
System.out.println("查询到了" + intRecords + "条数据,花费了"
+ (endTime - startTime) + "毫秒!");
} catch (ParseException e) {
e.printStackTrace();
} catch (CorruptIndexException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (isearcher != null) {
try {
isearcher.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return intRecords;
}
/**
* @param args
*/
public static void main(String[] args) {
String indexFilePath = "D:\\index";//索引文件路径
String queryString = "test";
TextFileSearcher textFileSearcher = new TextFileSearcher(indexFilePath);
textFileSearcher.queryByQueryParser(queryString);
}
}
下一篇: Lucene 分词