分享

lucene(全文搜索)_建立索引_根据关键字全文搜索_源码下载



导读

本文主要是对代码的一些介绍及需要一些准备工作








项目结构:
1.png
效果图:
需要建立索引的文件(我们需要从中查找出关键字的文档)
2.png
建立好的所有文件
3.png
搜索关键字"lucene"信息
4.png
大家是不是也想亲自动手尝试一下呢...
=========================================================
代码部分
=========================================================
准备工作:
5.png
下载完后,解压缩,可以得到:
lucene-core-3.5.0.jar
junit-4.7.jar
把这两个jar包加入到项目构建路径下面...看看----->项目结构
/lucene_0100_helloworld/src/com/b510/lucene/LuceneIndex.java

  1. /**
  2. *
  3. */
  4. package com.b510.lucene;
  5. import java.io.File;
  6. import java.io.FileReader;
  7. import java.io.IOException;
  8. import org.apache.lucene.analysis.standard.StandardAnalyzer;
  9. import org.apache.lucene.document.Document;
  10. import org.apache.lucene.document.Field;
  11. import org.apache.lucene.index.CorruptIndexException;
  12. import org.apache.lucene.index.IndexReader;
  13. import org.apache.lucene.index.IndexWriter;
  14. import org.apache.lucene.index.IndexWriterConfig;
  15. import org.apache.lucene.queryParser.ParseException;
  16. import org.apache.lucene.queryParser.QueryParser;
  17. import org.apache.lucene.search.IndexSearcher;
  18. import org.apache.lucene.search.Query;
  19. import org.apache.lucene.search.ScoreDoc;
  20. import org.apache.lucene.search.TopDocs;
  21. import org.apache.lucene.store.Directory;
  22. import org.apache.lucene.store.FSDirectory;
  23. import org.apache.lucene.store.LockObtainFailedException;
  24. import org.apache.lucene.util.Version;
  25. /**
  26. * Lucene create Index and search key word
  27. *
  28. * @author Hongten (hongtenzone@foxmail.com) <br />
  29. * @date 2012-11-28
  30. */
  31. public class LuceneIndex {
  32.     /**
  33.      * 创建索引
  34.      */
  35.     public void index() {
  36.         IndexWriter writer = null;
  37.         try {
  38.             // 1.创建Directory
  39.             // 这种方式是建立在内存中
  40.             // Directory directory = new RAMDirectory();
  41.             // 这种方式是存放在硬盘中
  42.             Directory directory = FSDirectory.open(new File(
  43.                     "D:/WordPlace/lucene/lucene_0100_helloworld/lucene/index"));
  44.             // 2.创建IndexWriter
  45.             IndexWriterConfig iwc = new IndexWriterConfig(Version.LUCENE_35,
  46.                     new StandardAnalyzer(Version.LUCENE_35));
  47.             writer = new IndexWriter(directory, iwc);
  48.             // 3.创建Document对象
  49.             Document doc = null;
  50.             // 4.为Document添加Field
  51.             File f = new File(
  52.                     "D:/WordPlace/lucene/lucene_0100_helloworld/lucene/example");
  53.             for (File file : f.listFiles()) {
  54.                 doc = new Document();
  55.                 doc.add(new Field("content", new FileReader(file)));
  56.                 doc.add(new Field("filename", file.getName(), Field.Store.YES,
  57.                         Field.Index.NOT_ANALYZED));
  58.                 doc.add(new Field("path", file.getAbsolutePath(),
  59.                         Field.Store.YES, Field.Index.NOT_ANALYZED));
  60.                 // 5.通过IndexWriter添加文档到索引中
  61.                 writer.addDocument(doc);
  62.             }
  63.         } catch (CorruptIndexException ce) {
  64.             ce.printStackTrace();
  65.         } catch (LockObtainFailedException e) {
  66.             e.printStackTrace();
  67.         } catch (IOException e) {
  68.             e.printStackTrace();
  69.         } finally {
  70.             try {
  71.                 if (writer != null) {
  72.                     writer.close();
  73.                 }
  74.             } catch (CorruptIndexException e2) {
  75.                 e2.printStackTrace();
  76.             } catch (IOException ioe) {
  77.                 ioe.printStackTrace();
  78.             }
  79.         }
  80.     }
  81.     /**
  82.      * 搜索关键字为key的n条记录
  83.      *
  84.      * @param key
  85.      *            关键字
  86.      * @param n
  87.      *            搜索的记录数
  88.      */
  89.     public void search(String key, int n) {
  90.         try {
  91.             // 1.创建Directory
  92.             Directory directory = FSDirectory.open(new File(
  93.                     "D:/WordPlace/lucene/lucene_0100_helloworld/lucene/index"));
  94.             // 2.创建IndexReader
  95.             IndexReader reader = IndexReader.open(directory);
  96.             // 3.根据IndexReader创建IndexSearcher
  97.             IndexSearcher searcher = new IndexSearcher(reader);
  98.             // 4.创建搜索的Query
  99.             // 创建parser来确定要搜索的文件的内容,第二个参数表示搜索的域
  100.             QueryParser parser = new QueryParser(Version.LUCENE_35, "content",
  101.                     new StandardAnalyzer(Version.LUCENE_35));
  102.             // 创建query,表示搜索域为content中包含key的文档
  103.             Query query = parser.parse(key);
  104.             // 5.根据searcher搜索并返回TopDocs
  105.             TopDocs tds = searcher.search(query, n);
  106.             // 6.根据TopDocs获取ScoreDoc对象
  107.             ScoreDoc[] sds = tds.scoreDocs;
  108.             for (ScoreDoc sd : sds) {
  109.                 // 7.根据searcher和ScordDoc对象获取具体的Document对象
  110.                 Document document = searcher.doc(sd.doc);
  111.                 // 8.根据Document对象获取需要的值
  112.                 System.out.println("文件名称:[" + document.get("filename")
  113.                         + "]  文件路径:[" + document.get("path") + "]");
  114.             }
  115.             // 9.关闭reader
  116.             reader.close();
  117.         } catch (CorruptIndexException e) {
  118.             e.printStackTrace();
  119.         } catch (IOException e) {
  120.             e.printStackTrace();
  121.         } catch (ParseException e) {
  122.             e.printStackTrace();
  123.         }
  124.     }
  125. }
复制代码



/lucene_0100_helloworld/src/com/b510/lucene/LuceneIndexTest.java

  1. /**
  2. *
  3. */
  4. package com.b510.lucene;
  5. import org.junit.Test;
  6. /**
  7. * @author Hongten (hongtenzone@foxmail.com) <br />
  8. * @date 2012-11-28
  9. */
  10. public class LuceneIndexTest {
  11.     @Test
  12.     public final void testIndex() {
  13.         LuceneIndex luceneIndex=  new LuceneIndex();
  14.         luceneIndex.index();
  15.     }
  16.    
  17.     @Test
  18.     public final void testSearch(){
  19.         LuceneIndex luceneIndex=  new LuceneIndex();
  20.         luceneIndex.search("lucene", 10);
  21.     }
  22. }
复制代码

链接:http://pan.baidu.com/s/1pJyo9Zl 密码:ko2k



已有(7)人评论

跳转到指定楼层
空桑止水 发表于 2014-12-11 16:15:44
支持分享,开始学习

回复

使用道具 举报

韩克拉玛寒 发表于 2014-12-12 09:22:17
回复

使用道具 举报

℡.小天 发表于 2014-12-12 11:43:39
回复

使用道具 举报

liusiping 发表于 2014-12-12 12:54:47
回复

使用道具 举报

hb1984 发表于 2014-12-12 17:44:29
谢谢楼主分享。      
回复

使用道具 举报

wubaozhou 发表于 2014-12-28 16:51:29
回复

使用道具 举报

pioneer 发表于 2015-3-24 21:44:03
写的很详细,学习了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条