lucene 例子

package org.cnos.lucene.core; import java.io.File; import java.io.IOException; import org.apache.lucene.analysis.Analyzer; import org.apache.lucene.analysis.TokenStream; import org.apache.lucene.analysis.standard.StandardAnalyzer; import org.apache.lucene.document.Document; import org.apache.lucene.document.Field; import org.apache.lucene.document.Field.Index; import org.apache.lucene.document.Field.Store; import org.apache.lucene.document.Field.TermVector; import org.apache.lucene.index.CorruptIndexException; import org.apache.lucene.index.IndexReader; import org.apache.lucene.index.IndexWriter; import org.apache.lucene.index.Term; import org.apache.lucene.index.TermPositionVector; import org.apache.lucene.search.Hits; import org.apache.lucene.search.IndexSearcher; import org.apache.lucene.search.TermQuery; 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.SimpleHTMLFormatter; import org.apache.lucene.search.highlight.TokenSources; import org.cnos.util.Configuration; public class CreateIndex {          Analyzer analyzer = new StandardAnalyzer();                         /**        * 创建索引       *        * @throws IOException       */       public void index() throws IOException{           Configuration rc = new Configuration("c:/test.properties");//相对路径                       File INDEX_DIR = new File(rc.getValue("indexDir"));                        //如果目录不存在创建目录             if (!INDEX_DIR.exists()) {                 INDEX_DIR.mkdir();             }                      IndexWriter indexWriter = new IndexWriter(INDEX_DIR,analyzer,true);                                                  Document doc1 = new Document();                      doc1.add(new Field("newsSecondTitle","张营长",Store.YES,Index.TOKENIZED,TermVector.WITH_POSITIONS_OFFSETS));                                          indexWriter.addDocument(doc1);                      Document doc2 = new Document();                      doc2.add(new Field("newsSecondTitle","刘舒服",Store.YES,Index.TOKENIZED,TermVector.WITH_POSITIONS_OFFSETS));                      indexWriter.addDocument(doc2);                      Document doc3 = new Document();                              doc3.add(new Field("newsSecondTitle","梵语里",Store.YES,Index.TOKENIZED,TermVector.WITH_POSITIONS_OFFSETS));                              indexWriter.addDocument(doc3);                      indexWriter.optimize();                      indexWriter.close();       }              // 进行搜索       public void searcher() throws IOException{           Configuration rc = new Configuration("c:/test.properties");//相对路径           String INDEX_DIR = rc.getValue("indexDir");                                            IndexReader reader;          Hits hits =null;          TermQuery query ;                      try {                             reader = IndexReader.open(INDEX_DIR);                                                       IndexSearcher searcher = new IndexSearcher(INDEX_DIR);                                                    query = new TermQuery(new Term("newsSecondTitle","里"));                                                    hits = searcher.search(query);                                                     //高亮显示设置                         SimpleHTMLFormatter simpleHTMLFormatter = new SimpleHTMLFormatter("<font color='red'>","</font>");                                                     Highlighter highlighter =new Highlighter(simpleHTMLFormatter,new QueryScorer(query));                                           // 这个100是指定关键字字符串的context的长度,你可以自己设定,因为不可能返回整篇正文内容                         highlighter.setTextFragmenter(new SimpleFragmenter(100));                                               for(int i = 0; i < hits.length(); i++){                                                          Document doc = hits.doc(i);                                                          TermPositionVector termFreqVector = (TermPositionVector)reader.getTermFreqVector(hits.id(i), "newsSecondTitle");                                                          TokenStream tokenStream = TokenSources.getTokenStream(termFreqVector);                                                          String result = highlighter.getBestFragment(tokenStream, doc.get("newsSecondTitle"));                                              System.out.println(doc.get("newsSecondTitle"));                                                          System.out.println(result);                                                      }                      } catch (CorruptIndexException e) {                 // TODO Auto-generated catch block                 e.printStackTrace();             } catch (IOException e) {                 // TODO Auto-generated catch block                 e.printStackTrace();             }                  }                           public static void main(String[] args) throws IOException {                      CreateIndex test = new CreateIndex();                      test.index();                      test.searcher();       }        } package org.cnos.util; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.util.Properties; /** * 读取properties文件 * @author Qutr * */ public class Configuration {      private Properties propertie;      private FileInputStream inputFile;      private FileOutputStream outputFile;          /** *//**       * 初始化Configuration类       */      public Configuration()      {          propertie = new Properties();      }          /** *//**       * 初始化Configuration类       * @param filePath 要读取的配置文件的路径+名称       */      public Configuration(String filePath)      {          propertie = new Properties();          try {              inputFile = new FileInputStream(filePath);              propertie.load(inputFile);              inputFile.close();          } catch (FileNotFoundException ex) {              System.out.println("读取属性文件--->失败!- 原因:文件路径错误或者文件不存在");              ex.printStackTrace();          } catch (IOException ex) {              System.out.println("装载文件--->失败!");              ex.printStackTrace();          }      }//end ReadConfigInfo()          /** *//**       * 重载函数,得到key的值       * @param key 取得其值的键       * @return key的值       */      public String getValue(String key)      {          if(propertie.containsKey(key)){              String value = propertie.getProperty(key);//得到某一属性的值              return value;          }          else              return "";      }//end getValue()          /** *//**       * 重载函数,得到key的值       * @param fileName properties文件的路径+文件名       * @param key 取得其值的键       * @return key的值       */      public String getValue(String fileName, String key)      {          try {              String value = "";              inputFile = new FileInputStream(fileName);              propertie.load(inputFile);              inputFile.close();              if(propertie.containsKey(key)){                  value = propertie.getProperty(key);                  return value;              }else                  return value;          } catch (FileNotFoundException e) {              e.printStackTrace();              return "";          } catch (IOException e) {              e.printStackTrace();              return "";          } catch (Exception ex) {              ex.printStackTrace();              return "";          }      }//end getValue()          /** *//**       * 清除properties文件中所有的key和其值       */      public void clear()      {          propertie.clear();      }//end clear();          /** *//**       * 改变或添加一个key的值,当key存在于properties文件中时该key的值被value所代替,       * 当key不存在时,该key的值是value       * @param key 要存入的键       * @param value 要存入的值       */      public void setValue(String key, String value)      {          propertie.setProperty(key, value);      }//end setValue()          /** *//**       * 将更改后的文件数据存入指定的文件中,该文件可以事先不存在。       * @param fileName 文件路径+文件名称       * @param description 对该文件的描述       */      public void saveFile(String fileName, String description)      {          try {              outputFile = new FileOutputStream(fileName);              propertie.store(outputFile, description);              outputFile.close();          } catch (FileNotFoundException e) {              e.printStackTrace();          } catch (IOException ioe){              ioe.printStackTrace();          }      }//end saveFile()          public static void main(String[] args)      {          Configuration rc = new Configuration("c:/test.properties");//相对路径                  String ip = rc.getValue("name");//以下读取properties文件的值          String host = rc.getValue("age");          String tab = rc.getValue("tab");          rc.setValue("std", "lisi");                  System.out.println("ip = " + ip + "ip-test leng = " + "ip-test".length());//以下输出properties读出的值          System.out.println("ip's length = " + ip.length());          System.out.println("host = " + host);          System.out.println("tab = " + tab);          rc.saveFile("c:/test.properties", "zhayingwrite");            }//end main()     }//end class ReadConfigInfo #zhanghouyingwrite #Fri Jun 27 11:07:47 CST 2008 indexDir=c:/index age=23 name=zhanghouying tab=spring
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值