专栏首页Hongtenlucene(全文搜索)_建立索引_根据关键字全文搜索_源码下载

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

项目结构:

效果图:

需要建立索引的文件(我们需要从中查找出关键字的文档)

建立好的所有文件

搜索关键字"lucene"信息

大家是不是也想亲自动手尝试一下呢...

=========================================================

代码部分

=========================================================

准备工作:

下载:lucene-3.5.0.zip

下载地址:http://archive.apache.org/dist/lucene/java/3.5.0/

下载完后,解压缩,可以得到:

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

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

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

项目源码下载地址http://files.cnblogs.com/hongten/lucene_0100_helloworld.zip

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • lucene和JDBC

    ==========================================

    Hongten
  • lucene in action_index and search

    你可以到:http://lucene.apache.org/ 了解更新,更全的关于lucene的信息。

    Hongten
  • lucene对日期(date)和整形(int)处理

    ==========================================

    Hongten
  • lucene和JDBC

    ==========================================

    Hongten
  • 批量 SQL 之 FORALL 语句

        对PL/SQL而言,任何的PL/SQL块或者子程序都是PL/SQL引擎来处理,而其中包含的SQL语句则由PL/SQL引擎发送SQL语句转交到SQL引擎...

    Leshami
  • iOS面试中被面试官问到的问题

    问题如下: 请你谈谈static和宏定义的区别。什么时候用static什么时候用宏定义。 你是怎么看代理和通知的 他们有什么区别? 说说你对内存管理的理解。 谈...

    timhbw
  • 用Vue.js开发原生应用选择Weex还是NativeScript?

    Vue.js是一个很好的框架!它有一个友好的学习曲线,结合了最好的React的组件方法和Angular的模板。尽管如此,Vue.js仍然有一个限制,它还不能像R...

    笔阁
  • 【DB笔试面试394】在Oracle中,SESSIONS和PROCESSES的关系是什么?

    在数据库安装完成后,常常需要设置SESSIONS和PROCESSES的大小。其中,SESSIONS指定了一个实例中允许的会话数,即能同时登录到数据库的并发用户数...

    小麦苗DBA宝典
  • JedisPool连接池

    172.31.1.135:7002> CONFIG GET maxclients ...

    王小明_HIT
  • Kubernetes-持久化存储卷PersistentVolume

    PersistentVolume(PV)用于为用户和管理员提供如何提供和消费存储的API,PV由管理员在集群中提供的存储。它就像Node一样是集群中的一种资源。...

    菲宇

扫码关注云+社区

领取腾讯云代金券