lucene中,很多方法都不推荐使用了,写个示例
public class IndexerCreate {
private static Analyzer luceneAnalyzer = new IKAnalyzer();
private static Directory indexDir = new RAMDirectory();
// private static Directory indexDir;
// static{
// try {
// indexDir = new SimpleFSDirectory(new File("D:/indexer"));
// } catch (IOException e) {
// e.printStackTrace();
// }
// }
public static void main(String[] args) throws Exception {
create();
search();
}
public static void create() throws Exception{
IndexWriterConfig config = new IndexWriterConfig(Version.LUCENE_35,luceneAnalyzer);
config.setOpenMode(OpenMode.CREATE);
IndexWriter indexWriter = new IndexWriter(indexDir,config);
Document doc1 = new Document();
doc1.add(new Field("id","1",Store.YES,Index.ANALYZED));
doc1.add(new Field("name","liangge",Store.YES,Index.ANALYZED));
doc1.add(new Field("content","我是中国人",Store.YES,Index.ANALYZED));
Document doc2 = new Document();
doc2.add(new Field("id","2",Store.YES,Index.ANALYZED));
doc2.add(new Field("name","liangge is a girl",Store.YES,Index.ANALYZED));
doc2.add(new Field("content","liangge am a good girl",Store.YES,Index.ANALYZED));
//删除重复索引
// String id1 = doc1.getFieldable("id").stringValue();
// Term term1 = new Term("id",id1);
// indexWriter.deleteDocuments(term1);
// String id2 = doc2.getFieldable("id").stringValue();
// Term term2 = new Term("id",id2);
// indexWriter.deleteDocuments(term2);
indexWriter.addDocument(doc1);
indexWriter.addDocument(doc2);
indexWriter.close();
}
public static void search() throws Exception{
String queryString = "liangge";
String[] fields = {"name","content"};
QueryParser queryParser = new MultiFieldQueryParser(Version.LUCENE_35, fields, luceneAnalyzer);
Query query = queryParser.parse(queryString);
// IndexReader reader = IndexReader.open(FSDirectory.open(new File(indexPath)));
IndexReader reader = IndexReader.open(indexDir);
IndexSearcher searcher = new IndexSearcher(reader);
TopScoreDocCollector results = TopScoreDocCollector.create(2, false);
searcher.search(query, results);
TopDocs topDocs = results.topDocs(0, 1);
System.out.println(topDocs.totalHits);
for(ScoreDoc scoreDoc : topDocs.scoreDocs){
Document doc = searcher.doc(scoreDoc.doc);
System.out.println(doc.get("name"));
System.out.println(doc.get("content"));
}
}
}
浙公网安备 33010602011771号