Lucene介绍

lucene的介绍,这里引用百度百科的介绍Lucene是apache软件基金会4 jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,即它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎(英文与德文两种西方语言)。Lucene的目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中实现全文检索的功能,或者是以此为基础建立起完整的全文检索引擎。Lucene是一套用于全文检索和搜寻的开源程式库,由Apache软件基金会支持和提供。Lucene提供了一个简单却强大的应用程式接口,能够做全文索引和搜寻。在Java开发环境里Lucene是一个成熟的免费开源工具。就其本身而言,Lucene是当前以及最近几年最受欢迎的免费Java信息检索程序库。人们经常提到信息检索程序库,虽然与搜索引擎有关,但不应该将信息检索程序库与搜索引擎相混淆。

了解lucene的相关知识直接进入lucene官网 http://lucene.apache.org/

在lucene的官网我们会发现还会有一个solr的开源的软件,它是基于的一个上层写的应用,lucene给我提供的是类似sdk的功能,开发人员需要更多的自己写代码,而solr相对少些代码。可想而知,如果使用lucene的话,我们可以更多的自定义自己的搜索

Lucene下载安装

进入上面的lucene的官方网站,找到下载后解压就行

根据lucene的版本的不同,需要的jdk的版本也会有差异,这个需要在官方网站上看看说明文档,本次测试使用的lucene4.9,编译的jdk为1.7

Unsupported major.minor version 51.0 xxx 
如果出现类似的异常,就是下载的lucene和编译的jdk的版本不对,更新个jdk1.7 就可以

Lucene入门实例

下面是在lucene的官方文档里的一段入门代码

public class LuceneDemo

{

  private static final Version version = Version.LUCENE_4_9;

  public static void main(String[] args) throws Exception

  {

    Analyzer analyzer = new StandardAnalyzer(version);

    // Store the index in memory:

    Directory directory = new RAMDirectory();

    // To store an index on disk, use this instead:

    //Directory directory = FSDirectory.open("/tmp/testindex");

    IndexWriterConfig config = new IndexWriterConfig(version, analyzer);

    IndexWriter iwriter = new IndexWriter(directory, config);

    Document doc = new Document();

    Document doc2 = new Document();

    String text = "This is the text to be indexed.";

    String text2 = "This is the text to be indexed22222.";

    doc.add(new Field("fieldname", text, TextField.TYPE_STORED));

    doc2.add(new Field("fieldname", text2, TextField.TYPE_STORED));

    iwriter.addDocument(doc); iwriter.addDocument(doc2); iwriter.close();

    // Now search the index:

    DirectoryReader ireader = DirectoryReader.open(directory);

    IndexSearcher isearcher = new IndexSearcher(ireader);

    // Parse a simple query that searches for "text":

    QueryParser parser = new QueryParser(version, "fieldname", analyzer);

    Query query = parser.parse("text");

    ScoreDoc[] hits = isearcher.search(query, null, 1000).scoreDocs;

    // Iterate through the results:

    for (int i = 0; i < hits.length; i++)

    {

      Document hitDoc = isearcher.doc(hits[i].doc);

      System.out.println("This is the text to be indexed="+hitDoc.get("fieldname"));

    }

    ireader.close();

    directory.close();

    }

  }

代码解析

写索引

建立索引开始建立Analyzer,创建索引保存位置创建写(IndexWriter)索引对象建立文档添加文档域添加文档关闭结束

读索引

从代码可以看到基本操作步骤:

  1. 先知名索引的位子,建立读索引的对象
  2. 创建查询器 Query(query有很多实现类,例子中用的是QueryParse的方法)
  3. 执行search方法,得到ScoreDoc ,解析文档
  4. 关闭读写器

Lucene主要元素

Lucene中有几个重要的元素

  1. IndexWriter – 用来创建写索引的对象,与之配合使用的有一个IndexWriterConfig,用来对indexwriter做配置
  2. IndexSearch – 与indexwriter对应,用来读所以
  3. Document – 被索引的内容形成一个document文档
  4. Field – 文档的域
  5. Query – 用来查询的对象
  6. Term – 构建查询
  7. ScoreDoc – 命中的结果集

比如:一篇文章,我们有title,author,createTime,category,content那么这每一个可以看做一个域,整个文章就是一个document,如果搜索内容content包含了lucene的文件,就会更具域content的所有找到有Lucene的文章。

Lucene基础(一)--入门的更多相关文章

  1. Linux基础知识入门

    [Linux基础]Linux基础知识入门及常见命令.   前言:最近刚安装了Linux系统, 所以学了一些最基本的操作, 在这里把自己总结的笔记记录在这里. 1,V8:192.168.40.10V1: ...

  2. Lucene基础(2)

    上一篇:Lucene基础(1) 一.Lucene术语 Document, Field, Term, Query, Analyzer相信在其中大多数在之前已经理解了...对其中部分概念详细说明 Docu ...

  3. Lucene基础(1)

    下一篇: Lucene基础(2) 一.Lucene介绍 http://www.kailing.pub/index/columns/colid/16.html Documentation:http:// ...

  4. cmd 与 bash 基础命令入门

    身为一个程序员会用命令行来进行一些简单的操作,不是显得很装逼嘛!?嘿嘿~ ヾ(>∀<) cmd 与 bash 基础命令入门       简介       CMD 基础命令          ...

  5. IM开发者的零基础通信技术入门(二):通信交换技术的百年发展史(下)

    1.系列文章引言 1.1 适合谁来阅读? 本系列文章尽量使用最浅显易懂的文字.图片来组织内容,力求通信技术零基础的人群也能看懂.但个人建议,至少稍微了解过网络通信方面的知识后再看,会更有收获.如果您大 ...

  6. IM开发者的零基础通信技术入门(一):通信交换技术的百年发展史(上)

    [来源申明]本文原文来自:微信公众号“鲜枣课堂”,官方网站:xzclass.com,原题为:<通信交换的百年沧桑(上)>,本文引用时已征得原作者同意.为了更好的内容呈现,即时通讯网在收录时 ...

  7. 序言 - PHP零基础快速入门

    我为什么要写<PHP零基础快速入门>? 原因: PHP 真心简单,适合零基础的人快速入门掌握,身边的人学习一两周上手开发的比比皆是: 市面上的文章或书籍对初学者并不友好,多半枯燥乏味,我相 ...

  8. Java基础语法入门01

    Java基础语法入门01 学习java你要先进行去了解JDK,JRE,JVM JDK Java开发工具包 JRE Java语言开发的运行环境 JVM Java虚拟机,用于Java语言的跨平台所用. 当 ...

  9. 贝叶斯公式由浅入深大讲解—AI基础算法入门

    1 贝叶斯方法 长久以来,人们对一件事情发生或不发生的概率,只有固定的0和1,即要么发生,要么不发生,从来不会去考虑某件事情发生的概率有多大,不发生的概率又是多大.而且概率虽然未知,但最起码是一个确定 ...

  10. Hadoop基础-MapReduce入门篇之编写简单的Wordcount测试代码

    Hadoop基础-MapReduce入门篇之编写简单的Wordcount测试代码 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 本文主要是记录一写我在学习MapReduce时的一些 ...

随机推荐

  1. linux剪切拷贝

    1.剪切 mv rename.sh  ../rename.sh  把这个文件移到上一级目录下 mv rename.sh ./pic/rename.sh 把这个文件移到 当前目录下的pic目录下,并改名 ...

  2. 利用Multipeer Connectivity框架进行WiFi传输

    什么是Multipeer Connectivity? 在iOS7中,引入了一个全新的框架——Multipeer Connectivity(多点连接).利用Multipeer Connectivity框 ...

  3. Porsche Piwis Tester II “No VCI has been detected”,how to do?

    Hi,Joy, I am sorry that my Porsche Piwis Tester II from your shop said “No VCI has been detected” wh ...

  4. Java安全防御学习笔记V1.0

    Java安全防御学习笔记V1.0http://www.docin.com/p-766808938.html

  5. 《java JDK7 学习笔记》之键值对Map

    一.常用的Map操作类 1.使用HashMap Map也支持泛型语法,泛型的Map实例: 建立Map操作对象时,可以使用泛型语法指定键与值的类型.上图键使用String,值也使用String类型.要建 ...

  6. JavaScript高级程序设计(第三版)学习笔记13、14章

    第13章,事件 事件冒泡 IE的事件叫做事件冒泡:由具体到不具体 <!DOCTYPE html> <html> <head>      <title>E ...

  7. get请求在ie浏览器下有缓存

    今天做项目的时候,数据库有新数据更新后,发现页面的行为却没有更新: 打断点调试的时候,发现程序也不进方法: 最终发现是因为请求数据的时候使用了get请求,而且在IE10下导致的: 注:IE浏览器中使用 ...

  8. android手机震动

    Vibrator是安卓提供的震动器,其没有构造器,通过getSystemService(Context.VIBRATOR_SERVICE)方法获取对象.但使用此类时需要在清单文件中添加访问权限andr ...

  9. web app开发中 iPhone、iPad默认按钮样式问题

    webapp开发过程中,用html5+css3很方便,而且可以很方便的编译到Android ios等不同平台,但是ios需要单独处理一下,不然会出现一些想象不到的问题.下面就介绍一下各种问题的解决方法 ...

  10. vs: 编译: 计算机中丢失mspdb100.dll

    在vs 2010中, 将Microsoft Visual Studio 10.0\VC\bin目录配置在path后(甚至添加lib以及include)后, 报如题错误. 是由于Microsoft Vi ...