/**
*
*/
package com.test;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import net.paoding.analysis.analyzer.PaodingAnalyzer;
import net.paoding.analysis.examples.gettingstarted.BoldFormatter;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.TermPositionVector;
import org.apache.lucene.queryParser.QueryParser;
import org.apache.lucene.search.Hits;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.Searcher;
import org.apache.lucene.search.highlight.Highlighter;
import org.apache.lucene.search.highlight.QueryScorer;
import org.apache.lucene.search.highlight.SimpleFragmenter;
import org.apache.lucene.search.highlight.TokenSources;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
/**
* @author Administrator
*
*/
public class LuceneTest {
private static String QUERY_FIELD = "address";
private static String FIELD3 = "id";
private static String FIELD1 = "name";
private static String FIELD2 = "address";
private static String QUERY = "中华 and 共和国";
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String driver = "com.mysql.jdbc.Driver";
String url = "jdbc:mysql://localhost:3306/mytest1?characterEncoding=utf-8";
String user = "root";
String password = "root";
String sql = "select * from test1";
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
Class.forName(driver);
conn = DriverManager.getConnection(url, user, password);
stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);
rs = stmt.executeQuery(sql);
Analyzer analyzer = new PaodingAnalyzer();
//Analyzer analyzer = new CJKAnalyzer();
//Directory ramDir = new RAMDirectory();
Directory ramDir = FSDirectory.getDirectory("d://luncene");
IndexWriter writer = new IndexWriter(ramDir, analyzer);
while (rs.next()) {
System.out.println(rs.getString("address"));
Document doc = new Document();
Field fd1 = new Field(FIELD1, rs.getString("name"), Field.Store.YES, Field.Index.TOKENIZED, Field.TermVector.WITH_POSITIONS_OFFSETS);
Field fd2 = new Field(FIELD2, rs.getString("address"), Field.Store.YES, Field.Index.TOKENIZED, Field.TermVector.WITH_POSITIONS_OFFSETS);
Field fd3 = new Field(FIELD3, rs.getString("id"), Field.Store.YES, Field.Index.TOKENIZED, Field.TermVector.WITH_POSITIONS_OFFSETS);
doc.add(fd1);
doc.add(fd2);
doc.add(fd3);
writer.addDocument(doc);
System.out.println("-------------------------------");
}
writer.optimize();
writer.close();
//
IndexReader reader = IndexReader.open(ramDir);
String queryString = QUERY;
QueryParser parser = new QueryParser(QUERY_FIELD, analyzer);
Query query = parser.parse(queryString);
Searcher searcher = new IndexSearcher(ramDir);
query = query.rewrite(reader);
System.out.println("Searching for: " + query.toString(QUERY_FIELD));
Hits hits = searcher.search(query);
BoldFormatter formatter = new BoldFormatter();
Highlighter highlighter = new Highlighter(formatter, new QueryScorer(query));
highlighter.setTextFragmenter(new SimpleFragmenter(50));
for (int i = 0; i < hits.length(); i++) {
Document doc=hits.doc(i);
String text = hits.doc(i).get(QUERY_FIELD);
int maxNumFragmentsRequired = 5;
String fragmentSeparator = "...";
TermPositionVector tpv = (TermPositionVector) reader.getTermFreqVector(hits.id(i), QUERY_FIELD);
TokenStream tokenStream = TokenSources.getTokenStream(tpv);
String result = highlighter.getBestFragments(tokenStream, text, maxNumFragmentsRequired, fragmentSeparator);
System.out.println(doc.getField(FIELD3).stringValue()+"\t"+doc.getField(FIELD1).stringValue()+"\n" + result);
}
reader.close();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
rs.close();
stmt.close();
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
LuceneTest
最新推荐文章于 2022-11-11 23:55:10 发布