lucence小例子-注释详解

1、创建索引

package demo;

import java.io.IOException;

import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.index.CorruptIndexException;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.store.LockObtainFailedException;

public class CreateIndex {
 
 public static void main(String[] args) throws CorruptIndexException, LockObtainFailedException, IOException {
  //创建标准分析器 可用于分词
    Analyzer luceneAnalyzer = new StandardAnalyzer();
    //索引文件所在目录   分析器   索引文件没有创建 ,有就覆盖(false:在原来的基础上创建)    域的长度没有限制
    IndexWriter indexWriter = new IndexWriter("e:/sou",luceneAnalyzer,true,IndexWriter.MaxFieldLength.UNLIMITED);
    //创建字符串数组
    String[] arrstr = new String[18];
    arrstr[0]="昭珂 刘ajax jsf spring ";
    arrstr[1]="小鹿 中鹿 老鹿  ";
    arrstr[2]="DNF 张冲 asp.net c# 北京 "; 
    arrstr[3]="王衍伟 山东   北京大学  ";
    arrstr[4]="张永博 美女  ";
    arrstr[5]="朱翠武  撒旦  ";
    arrstr[6]="纪伟乔  奥运  ";
    arrstr[7]="孙海龙  纽约 五角大楼 ";
    arrstr[8]="利辉徐  魔兽世界 ";
    arrstr[9]="薛 新峰  北京 联想公司 ";
    arrstr[10]="孙 津津  jquery ";
    arrstr[11]="马 晨智  java工程师 ";
    arrstr[12]="丁 钰 清华大学 美女 ";
    arrstr[13]="港港 卢  人体艺术 ";
    arrstr[14]="刘 宗武  柑橘 ";
    arrstr[15]="刘 宗武  白果 ";
    arrstr[16]="刘 宗武  鸭梨 ";
    arrstr[17]="刘 宗武  哈密瓜 ";
    int i=0;
   for (String str:arrstr){
   i++;
   //Document相当于一行记录
   Document doc=new Document();
   //  Field相当于一个字段               名字            是否存储           不作为搜索字段
   Field fid=new Field("id",""+i, Field.Store.YES,Field.Index.NO);
   //                   名字     字段值     存储          作为搜索字段
   Field fbody=new Field("body",str,Field.Store.YES,Field.Index.ANALYZED);
   doc.add(fid);
   doc.add(fbody);
   indexWriter.addDocument(doc);
    }
   //写向文件
 indexWriter.optimize();
   //当调用close时候才将索引存入磁盘
 indexWriter.close();
 }
}

 

2、搜索

package demo;

import java.io.IOException;

import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.index.CorruptIndexException;
import org.apache.lucene.queryParser.ParseException;
import org.apache.lucene.queryParser.QueryParser;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.TopDocCollector;
import org.apache.lucene.search.TopDocs;

public class SearchIndex {

 public static void main(String[] args) throws CorruptIndexException, IOException, ParseException{
  String queryString = "刘 山东";
  //索引搜索器
  IndexSearcher searcher=new IndexSearcher("e:/sou");
  
  //创建标准分析器 可用于分词
     Analyzer luceneAnalyzer = new StandardAnalyzer();
     //查询解析器
     QueryParser parser=new QueryParser("body" ,luceneAnalyzer );
     //把分析结果放入Query对象存储
     Query query=parser.parse(queryString);
     //创建容器
     TopDocCollector collector=new TopDocCollector(5);
     //搜索     传入分析结果     存储搜索结果
     searcher.search(query, collector);
     //处理  等到Document对象
     TopDocs topDocs=collector.topDocs();
     ScoreDoc[] score=topDocs.scoreDocs;
     for(ScoreDoc s:score ){
      //获得document 的唯一标识
      int docId=s.doc;
      //根据唯一标识  查找Document对象
      Document doc=searcher.doc(docId);
      //根据域名字取域对应的值
      System.out.println(doc.get("id")+":"+doc.get("body"));
     }
 }
}

你可能感兴趣的:(lucence小例子-注释详解)