Example #1
0
 @SuppressWarnings("resource")
 public static void main(String[] args) throws CorruptIndexException, Exception {
   // Lucene Document的域名
   String fieldName = "text";
   // 检索内容
   String text = "的数据库的设计可怜的";
   // 实例化IKAnalyzer分词器
   Analyzer analyzer = new IKAnalyzer();
   Directory directory = FSDirectory.open(new File("D:/luce/index"));
   IndexWriter iwriter = null;
   IndexReader ireader = null;
   IndexSearcher isearcher = null;
   // 建立内存索引对象
   // directory = new RAMDirectory();
   // 配置IndexWriterConfig
   IndexWriterConfig iwConfig = new IndexWriterConfig(Version.LUCENE_34, analyzer);
   iwConfig.setOpenMode(OpenMode.CREATE_OR_APPEND);
   iwriter = new IndexWriter(directory, iwConfig);
   // 写入索引
   Document doc = new Document();
   doc.add(new Field("ID", "10000", Field.Store.YES, Field.Index.NOT_ANALYZED));
   doc.add(new Field(fieldName, text, Field.Store.YES, Field.Index.ANALYZED));
   iwriter.addDocument(doc);
   iwriter.close();
   // 搜索过程********************************** //实例化搜索器
   ireader = IndexReader.open(directory);
   isearcher = new IndexSearcher(ireader);
   String keyword = "dsfdjksjflkds";
   // 使用QueryParser查询分析器构造Query对象
   QueryParser qp = new QueryParser(Version.LUCENE_34, fieldName, analyzer);
   qp.setDefaultOperator(QueryParser.AND_OPERATOR);
   Query query = qp.parse(keyword);
   // 搜索相似度最高的5条记录
   TopDocs topDocs = isearcher.search(query, 5);
   System.out.println("命中:" + topDocs.totalHits);
   // 输出结果
   ScoreDoc[] scoreDocs = topDocs.scoreDocs;
   for (int i = 0; i < topDocs.totalHits; i++) {
     Document targetDoc = isearcher.doc(scoreDocs[i].doc);
     System.out.println("内容:" + targetDoc.toString());
     // System.out.println(scoreDocs[i].);
   }
 }