.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.TopDocCollector;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
public class TestQueryParser {
public static void main(String[] args) throws IOException, ParseException {
Analyzer analyzer = new PaodingAnalyzer();
String indexDir = "E:/luceneindex";
Directory dir = FSDirectory.getDirectory(indexDir);
IndexSearcher searcher = new IndexSearcher(dir);
ScoreDoc[] hits = null;
QueryParser parser = new QueryParser("address", analyzer); //name为默认字段检索
Query query = parser.parse("北京");
//Query query = parser.parse("birthday:[19820720 TO 19840203]"); //中括号包含首尾,花括号不包含。TO指范围
//Query query = parser.parse("张~"); //前缀检索
//Query query = parser.parse("上海 北京");
//Query query = parser.parse("(居住 or 北京) and 海淀");
//Query query = parser.parse("上海 北京 AND NOT name:李四");
//Query query = parser.parse("name:李*"); //前缀检索
TopDocCollector topdoc = new TopDocCollector(100);
searcher.search(query, topdoc);
hits = topdoc.topDocs().scoreDocs;
for(int i = 0; i < hits.length; i++){
Document doc = searcher.doc(hits[i].doc);
//System.out.println(hits[i].score);
System.out.print(doc.get("id") + " ");
System.out.print(doc.get("name") + " ");
System.out.print(doc.get("address") + " ");
System.out.println(doc.get("birthday") + " ");
}
searcher.close();
dir.close();
}
}
下面我们来学习Paoding对文件的索引
[java]
package com.qianyan.file;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import net.paoding.analysis.analyzer.PaodingAnalyzer;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
public class TestFileIndex {
public static void main(String[] args) throws IOException {
String dataDir = "E:\\lucenedata";
String indexDir = "E:\\luceneindex";
File[] files = new File(dataDir).listFiles();
Analyzer analyzer = new PaodingAnalyzer();
Directory dir = FSDirectory.getDirectory(indexDir);
IndexWriter writer = new IndexWriter(dir, analyzer, true, IndexWriter.MaxFieldLength.UNLIMITED);
for(int i = 0; i < files.length; i++){
StringBuffer strBuffer = new StringBuffer();
String line = "";
FileInputStream fs = new FileInputStream(files[i].getCanonicalPath());
BufferedReader reader = new BufferedReader(new InputStreamReader(fs));
line = reader.readLine();
while(null != line){
strBuffer.append(line).append("\n");
line = reader.readLine();
}
Document document = new Document();
document.add(new Field("fileName", files[i].getName(), F