转载http://liqita.iteye.com/blog/1676664

第一步:下载lucene的核心包

lucene-core-3.6.1-javadoc.jar (3.5 MB)

lucene-core-3.6.1.jar (1.5 MB)

拷贝到项目的lib 文件夹里

第二步:

在C盘下建立source文件夹   (C:\source)

source文件夹存放待索引的文件,例如,建立两个文件,名称为 test1.txt  test2.txt  。

test1.txt文件内容为:欢迎来到绝对秋香的博客。

test2.txt文件内容为:绝对秋香引领你走向潮流。

在C盘下再建立index文件夹,存放索引文件 (C:\index)

第三步,建立索引类 TextFileIndexer ,并运行主函数

  1. package com.newtouchone.lucene;
  2. import java.io.BufferedReader;
  3. import java.io.File;
  4. import java.io.FileInputStream;
  5. import java.io.IOException;
  6. import java.io.InputStreamReader;
  7. import java.util.Date;
  8. import org.apache.lucene.analysis.Analyzer;
  9. import org.apache.lucene.analysis.standard.StandardAnalyzer;
  10. import org.apache.lucene.document.Document;
  11. import org.apache.lucene.document.Field;
  12. import org.apache.lucene.index.IndexWriter;
  13. import org.apache.lucene.index.IndexWriterConfig;
  14. import org.apache.lucene.index.IndexWriterConfig.OpenMode;
  15. import org.apache.lucene.store.Directory;
  16. import org.apache.lucene.store.FSDirectory;
  17. import org.apache.lucene.util.Version;
  18. public class TextFileIndexer {
  19. public static void main(String[] args) throws Exception {
  20. /* 指明要索引文件夹的位置,这里是C盘的source文件夹下 */
  21. File fileDir = new File("C:\\source");
  22. /* 这里放索引文件的位置 */
  23. File indexDir = new File("C:\\index");
  24. Directory dir = FSDirectory.open(indexDir);
  25. Analyzer luceneAnalyzer = new StandardAnalyzer(Version.LUCENE_36);
  26. IndexWriterConfig iwc = new IndexWriterConfig(Version.LUCENE_36,luceneAnalyzer);
  27. iwc.setOpenMode(OpenMode.CREATE);
  28. IndexWriter indexWriter = new IndexWriter(dir,iwc);
  29. File[] textFiles = fileDir.listFiles();
  30. long startTime = new Date().getTime();
  31. //增加document到索引去
  32. for (int i = 0; i < textFiles.length; i++) {
  33. if (textFiles[i].isFile()
  34. && textFiles[i].getName().endsWith(".txt")) {
  35. System.out.println("File " + textFiles[i].getCanonicalPath()
  36. + "正在被索引....");
  37. String temp = FileReaderAll(textFiles[i].getCanonicalPath(),
  38. "GBK");
  39. System.out.println(temp);
  40. Document document = new Document();
  41. Field FieldPath = new Field("path", textFiles[i].getPath(),
  42. Field.Store.YES, Field.Index.NO);
  43. Field FieldBody = new Field("body", temp, Field.Store.YES,
  44. Field.Index.ANALYZED,
  45. Field.TermVector.WITH_POSITIONS_OFFSETS);
  46. document.add(FieldPath);
  47. document.add(FieldBody);
  48. indexWriter.addDocument(document);
  49. }
  50. }
  51. indexWriter.close();
  52. //测试一下索引的时间
  53. long endTime = new Date().getTime();
  54. System.out
  55. .println("这花费了"
  56. + (endTime - startTime)
  57. + " 毫秒来把文档增加到索引里面去!"
  58. + fileDir.getPath());
  59. }
  60. public static String FileReaderAll(String FileName, String charset)
  61. throws IOException {
  62. BufferedReader reader = new BufferedReader(new InputStreamReader(
  63. new FileInputStream(FileName), charset));
  64. String line = new String();
  65. String temp = new String();
  66. while ((line = reader.readLine()) != null) {
  67. temp += line;
  68. }
  69. reader.close();
  70. return temp;
  71. }
  72. }

输出结果为:

  1. File C:\source\test1.txt正在被索引....
  2. 欢迎来到绝对秋香的博客。
  3. File C:\source\test2.txt正在被索引....
  4. 绝对秋香引领你走向潮流。
  5. 这花费了641 毫秒来把文档增加到索引里面去!C:\source

第四步,建立测试类TestQuery,并运行主函数,输出测试结果

  1. package com.newtouchone.lucene;
  2. import java.io.File;
  3. import java.io.IOException;
  4. import org.apache.lucene.analysis.Analyzer;
  5. import org.apache.lucene.analysis.standard.StandardAnalyzer;
  6. import org.apache.lucene.index.IndexReader;
  7. import org.apache.lucene.queryParser.ParseException;
  8. import org.apache.lucene.queryParser.QueryParser;
  9. import org.apache.lucene.search.IndexSearcher;
  10. import org.apache.lucene.search.Query;
  11. import org.apache.lucene.search.ScoreDoc;
  12. import org.apache.lucene.search.TopDocs;
  13. import org.apache.lucene.store.FSDirectory;
  14. import org.apache.lucene.util.Version;
  15. public class TestQuery {
  16. public static void main(String[] args) throws IOException, ParseException {
  17. String index = "C:\\index";         //搜索的索引路径
  18. IndexReader reader = IndexReader.open(FSDirectory.open(new File(index)));
  19. IndexSearcher searcher = new IndexSearcher(reader);
  20. ScoreDoc[] hits = null;
  21. String queryString = "绝对秋香";   //搜索的关键词
  22. Query query = null;
  23. Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_36);
  24. try {
  25. QueryParser qp = new QueryParser(Version.LUCENE_36,"body", analyzer);
  26. query = qp.parse(queryString);
  27. } catch (ParseException e) {
  28. }
  29. if (searcher != null) {
  30. TopDocs results = searcher.search(query,10);    //返回最多为10条记录
  31. hits = results.scoreDocs;
  32. if (hits.length > 0) {
  33. System.out.println("找到:" + hits.length + " 个结果!");
  34. }
  35. searcher.close();
  36. }
  37. }
  38. }

测试输出结果为:

  1. 找到:2 个结果!

附件homework.rar为项目文件,解压部署则可运行该lucene案例

lucene3.6.1 经典案例 入门教程 (包含从文件中读取content)的更多相关文章

  1. lucene3.6.0 经典案例 入门教程

    第一步:下载并导入lucene的核心包(注意版本问题):  例如Lucene3.6版本:将lucene-core-3.6.0.jar拷贝到项目的libs 文件夹里.  例如Lucene4.6版本:将l ...

  2. Entity Framework入门教程(3)---EF中的上下文简介

    1.DbContext(上下文类) 在DbFirst模式中,我们添加一个EDM(Entity Data Model)后会自动生成一个.edmx文件,这个文件中包含一个继承DbContext类的上下文实 ...

  3. DotNetBrowser入门教程(更新完善中)

    DotNetBrowser 希望实现的目标:桌面软件可以完美运行Html5,内置支持MVC与WebSocket的微型服务器. 基于.Net 4.0开发.开发环境:VS2017,运行环境支持Window ...

  4. linux入门教程(六) Linux文件与目录管理

    在linux中什么是一个文件的路径呢,说白了就是这个文件存在的地方,例如在上一章提到的/root/.ssh/authorized_keys 这就是一个文件的路径.如果你告诉系统这个文件的路径,那么系统 ...

  5. flask的模板引擎jinja入门教程 包含一个通过网络实时传输Video视频流的示例

    本文首发于个人博客https://kezunlin.me/post/1e37a6/,欢迎阅读最新内容! tutorial to use python flask jinja templates and ...

  6. Entity Framework入门教程(4)---EF中的实体关系

    这一节将总结EF是怎么管理实体之间的关系.EF与数据库一样支持三种关系类型:①一对一 ,②一对多,③多对多. 下边是一个SchoolDB数据库的实体数据模型,图中包含所有的实体和各个实体间的关系.通过 ...

  7. JavaScript 入门教程二 在HTML中使用 JavaScript

    一.使用 <script> 元素的方式有两种:直接在页面中嵌入 JavaScript 代码和引用外部 JavaScript 文件. 二.使用内嵌方式,一般写法为: <script t ...

  8. Entity Framework入门教程(5)---EF中的持久化场景

    EF中的持久性场景 使用EF实现实体持久化(保存)到数据库有两种情况:在线场景和离线场景. 1.在线场景 在线场景中,context是同一个上下文实例(从DbContext派生),检索和保存实体都通过 ...

  9. Entity Framework入门教程(7)--- EF中的查询方法

    这里主要介绍两种查询方法 Linq to entity(L2E)和Sql 1.L2E查询 L2E查询时可以使用linq query语法,或者lambda表达式,默认返回的类型是IQueryable,( ...

随机推荐

  1. LeetCode OJ 152. Maximum Product Subarray

    Find the contiguous subarray within an array (containing at least one number) which has the largest ...

  2. amazeui tab 监听当前选项

    $('#contenttab').find('a').on('opened.tabs.amui', function(e) { if(e.target.pathname.indexOf("[ ...

  3. C - 哗啦啦村的扩建

    C - 哗啦啦村的扩建 Time Limit: 2000/1000MS (Java/Others)    Memory Limit: 512000/256000KB (Java/Others) Sub ...

  4. 【code vs】 2780 ZZWYYQWZHZ

    2780 ZZWYYQWZHZ 题目描述 Description 可爱的小管在玩吹泡泡.忽然,他想到了一种排序....... 输入描述 Input Description 第一行输入n,表示有n个数. ...

  5. jquery源码阅读(1)

    每天坚持阅读一定量的的jquery代码,积少成多!加油加油! jquery-2.2.1的9161~9194行 1 if ( typeof define === "function" ...

  6. webstrom官方的活动模版介绍

    编辑模板变量对话框 文件|设置|生活模板--编辑变量Windows和LinuxWebStorm |偏好|生活模板--编辑变量在OS XCtrl + Alt + S 当你点击对话框打开 编辑变量按钮模板 ...

  7. shell脚本中$

    变量名只能包含数字.字母和下划线,因为某些包含其他字符的变量有特殊含义,这样的变量被称为特殊变量. 例如,$ 表示当前Shell进程的ID,即pid ./package/kernel/mac80211 ...

  8. hud 2549 壮志难酬

    Problem Description 话说MCA山上各路豪杰均出山抗敌,去年曾在江湖威名显赫的,江湖人称<万军中取上将首级舍我其谁>的甘露也不甘示弱,“天将降大任于斯人也,必先劳其筋骨, ...

  9. nefu 519 昨日重现

    昨日重现 Problem : 519 Time Limit : 1000ms Memory Limit : 65536K description 兴安黑熊在高中学习数学时,曾经知道这样一个公式:f(n ...

  10. SharePoint 2010 应用url参数过滤列表视图数据(应用get办法过滤列表数据)

    名人名言:读活书,活读书,读书活.——郭沫若 题目其实不知道如何称呼才干合适大师的搜刮习惯.以便有类似题目经由过程百度或google可以搜刮到,其实就是在url后面添加参数过滤显示我们想要的成果,有人 ...