http://javadoc.org.cn/home.php?mod=space&uid=2&do=blog&id=19
package test;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.Term;
import org.apache.lucene.queryParser.QueryParser;
import org.apache.lucene.search.BooleanQuery;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.TermQuery;
import org.apache.lucene.search.TopDocs;
import org.apache.lucene.search.BooleanClause.Occur;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.util.Version;
import org.junit.Test;
import com.tuyard.groupen.SpiderImpl;
public class GoodsSearch {
@Test
public void testQuery() {
try {
Directory indexDirectory = FSDirectory.open(SpiderImpl.indexDateDir);
IndexSearcher searcher = new IndexSearcher(indexDirectory, true);
BooleanQuery query = new BooleanQuery();
Query termQuery = new TermQuery(new Term("city", String.valueOf(3))); // 基本/精确
// 查询
query.add(termQuery, Occur.MUST);// 根据索引中的document生成时的设置,可以实现精确记录
QueryParser qp = new QueryParser(Version.LUCENE_29, "content", SpiderImpl.Analyzer);
Query qcontent = qp.parse("东北");
query.add(qcontent, Occur.MUST);
//
TopDocs tds = searcher.search(query, 10);
// request.setAttribute("paging", Paging.getPagingString(tds.totalHits,
// pageSize, cpage, "/q.htm?p=$&q=" + URLEncoder.encode(str, "utf-8") +
// ".htm"));
StringBuffer sb = new StringBuffer();
for (ScoreDoc sd : tds.scoreDocs) {
System.out.println(sd.score);
sb.append(searcher.doc(sd.doc).get("id")).append(",");
System.out.println(searcher.doc(sd.doc).get("id"));
}
System.out.println("==" + sb.toString());
// String sql = "select * from TB_Goods where id in(" + sb + ")";
// request.setAttribute("list", objs[2]);
} catch (Exception e) {
e.printStackTrace();
}
}
@Test
public void testBuilder() {
try {
String txt = "京华时报1月23日报道 昨天,受一股来自中西伯利亚的强冷空气影响,本市出现大风降温天气,白天最高气温只有零下7摄氏度,同时伴有6到7级的偏北风。";
IndexWriter iwriter = new IndexWriter(Search.goodsIndex, Search.Analyzer, true,
IndexWriter.MaxFieldLength.LIMITED);
Document doc = new Document();
doc.add(new Field("txt", txt, Field.Store.YES, Field.Index.ANALYZED));
iwriter.addDocument(doc);
iwriter.commit();
iwriter.optimize();
iwriter.close();
} catch (Exception e) {
e.printStackTrace();
}
}
@Test
public void testSearch() {
try {
IndexSearcher searcher = new IndexSearcher(Search.goodsIndex, true);
QueryParser qp = new QueryParser(Version.LUCENE_29, "txt", Search.Analyzer);
Query q = qp.parse("西伯利亚");
System.out.println(q);
TopDocs tds = searcher.search(q, 10);
System.out.println("======size:" + tds.totalHits + "========");
for (ScoreDoc sd : tds.scoreDocs) {
System.out.println(sd.score);
System.out.println(searcher.doc(sd.doc).get("txt"));
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
相关的jar文件: http://www.apache.org/dist/lucene/java/lucene-2.9.3.zip
http://code.google.com/p/mmseg4j/