`

lucene原理

阅读更多
1.1 什么是lucene
    Lucene是一个全文搜索框架,而不是应用产品。因此它并不像www.baidu.com 或者google Desktop那么拿来就能用,它只是提供了一种工具让你能实现这些产品。
2 lucene的工作方式
    lucene提供的服务实际包含两部分:一入一出。所谓入是写入,即将你提供的源(本质是字符串)写入索引或者将其从索引中删除;所谓出是读出,即向用户提供全文搜索服务,让用户可以通过关键词定位源。
2.1写入流程
    源字符串首先经过analyzer处理,包括:分词,分成一个个单词;去除stopword(可选)。
将源中需要的信息加入Document的各个Field中,并把需要索引的Field索引起来,把需要存储的Field存储起来。
    将索引写入存储器,存储器可以是内存或磁盘。
2.2读出流程
    用户提供搜索关键词,经过analyzer处理。
对处理后的关键词搜索索引找出对应的Document。
用户根据需要从找到的Document中提取需要的Field。

3 一些需要知道的概念
3.1 analyzer
    Analyzer是分析器,它的作用是把一个字符串按某种规则划分成一个个词语,并去除其中的无效词语,这里说的无效词语是指英文中的“of”、“the”,中文中的“的”、“地”等词语,这些词语在文章中大量出现,但是本身不包含什么关键信息,去掉有利于缩小索引文件、提高效率、提高命中率。
  分词的规则千变万化,但目的只有一个:按语义划分。这点在英文中比较容易实现,因为英文本身就是以单词为单位的,已经用空格分开;而中文则必须以某种方法将连成一片的句子划分成一个个词语。具体划分方法下面再详细介绍,这里只需了解分析器的概念即可。
3.2 document
  用户提供的源是一条条记录,它们可以是文本文件、字符串或者数据库表的一条记录等等。一条记录经过索引之后,就是以一个Document的形式存储在索引文件中的。用户进行搜索,也是以Document列表的形式返回。
3.3 field
    一个Document可以包含多个信息域,例如一篇文章可以包含“标题”、“正文”、“最后修改时间”等信息域,这些信息域就是通过Field在Document中存储的。
    Field有两个属性可选:存储和索引。通过存储属性你可以控制是否对这个Field进行存储;通过索引属性你可以控制是否对该Field进行索引。这看起来似乎有些废话,事实上对这两个属性的正确组合很重要,下面举例说明:还是以刚才的文章为例子,我们需要对标题和正文进行全文搜索,所以我们要把索引属性设置为真,同时我们希望能直接从搜索结果中提取文章标题,所以我们把标题域的存储属性设置为真,但是由于正文域太大了,我们为了缩小索引文件大小,将正文域的存储属性设置为假,当需要时再直接读取文件;我们只是希望能从搜索解果中提取最后修改时间,不需要对它进行搜索,所以我们把最后修改时间域的存储属性设置为真,索引属性设置为假。上面的三个域涵盖了两个属性的三种组合,还有一种全为假的没有用到,事实上Field不允许你那么设置,因为既不存储又不索引的域是没有意义的。
3.4 term
  term是搜索的最小单位,它表示文档的一个词语,term由两部分组成:它表示的词语和这个词语所出现的field。
3.5 tocken
    tocken是term的一次出现,它包含trem文本和相应的起止偏移,以及一个类型字符串。一句话中可以出现多次相同的词语,它们都用同一个term表示,但是用不同的tocken,每个tocken标记该词语出现的地方。
3.6 segment
    添加索引时并不是每个document都马上添加到同一个索引文件,它们首先被写入到不同的小文件,然后再合并成一个大索引文件,这里每个小文件都是一个segment。

4 如何建索引
4.1 最简单的能完成索引的代码片断
IndexWriter writer = new IndexWriter(“/data/index/”, new StandardAnalyzer(), true); 
Document doc = new Document(); 
doc.add(new Field("title", "lucene introduction", Field.Store.YES, Field.Index.TOKENIZED)); 
doc.add(new Field("content", "lucene works well", Field.Store.YES, Field.Index.TOKENIZED)); 
writer.addDocument(doc); 
writer.optimize(); 
writer.close(); 
下面我们分析一下这段代码。
首先我们创建了一个writer,并指定存放索引的目录为“/data/index”,使用的分析器为StandardAnalyzer,第三个参数说明如果已经有索引文件在索引目录下,我们将覆盖它们。然后我们新建一个document。
  我们向document添加一个field,名字是“title”,内容是“lucene introduction”,对它进行存储并索引。再添加一个名字是“content”的field,内容是“lucene works well”,也是存储并索引。
然后我们将这个文档添加到索引中,如果有多个文档,可以重复上面的操作,创建document并添加。
添加完所有document,我们对索引进行优化,优化主要是将多个segment合并到一个,有利于提高索引速度。
   随后将writer关闭,这点很重要。
   对,创建索引就这么简单!
  当然你可能修改上面的代码获得更具个性化的服务。
4.2 索引文本文件
    如果你想把纯文本文件索引起来,而不想自己将它们读入字符串创建field,你可以用下面的代码创建field:
Field field = new Field("content", new FileReader(file));
分享到:
评论

相关推荐

    Lucene原理及使用总结

    【Lucene原理】 现代搜索引擎的核心是建立索引和基于索引的搜索。Lucene采用反向索引(inverted index)机制,这是一种数据结构,它将文档中的每个单词映射到包含这些单词的文档列表。这样,当执行搜索时,Lucene...

    lucene 原理与代码分析

    《Lucene原理与代码分析》深入探讨了几乎最新版本的Lucene的工作机制和代码实现细节,为理解全文搜索引擎的核心技术提供了宝贵的资源。以下是对该文件关键知识点的详细解析: ### 全文检索的基本原理 #### 总论 ...

    lucene原理与代码分析完整版

    ### Lucene原理与代码分析概览 #### 一、全文检索基本原理 全文检索是一种能够检索文档中任意词语的信息检索技术。与简单的关键词查询不同,全文检索不仅关注文档标题、元数据,还深入到文档的实际内容中去。这种...

    Lucene 原理与代码分析.pdf

    该文档《Lucene原理与代码分析》深入探讨了Lucene的工作原理及其实现机制,内容涵盖了从理论到实践的各个层面。 在原理篇中,首先对全文检索的基本原理进行了介绍。全文检索是指对文档集合进行建索引,以便快速检索...

    Lucene 原理与代码分析完整版.pdf

    ### Lucene原理与代码分析概览 #### 一、全文检索的基本原理 **1. 总论** 全文检索系统的核心在于构建高效的索引,并通过这些索引实现快速精确的搜索功能。Lucene作为一款高性能的全文检索库,其设计与实现充分...

    Lucene原理与代码分析完整版

    资源名称:Lucene 原理与代码分析完整版资源截图: 资源太大,传百度网盘了,链接在附件中,有需要的同学自取。

    Lucene 原理与代码分析完整版.MOBI

    Lucene 原理与代码分析完整版.MOBI

    Lucene的原理完整版pdf

    **Lucene原理详解** Lucene是一个高性能、全文检索库,由Apache软件基金会开发并维护,是Java编程语言中广泛使用的搜索引擎库。它提供了一个简单但功能强大的API,用于索引和搜索文本数据,使得开发者可以轻松地在...

    Lucene原理

    通过深入理解Lucene的工作原理,并结合Analyzer的定制、查询优化策略以及性能调优,开发者可以构建出满足特定需求的高性能搜索引擎。同时,Lucene也提供了丰富的API,便于与其他系统集成,如Solr和Elasticsearch等,...

    Lucene 原理与代码分析完整版

    本文将对Lucene的基本原理及其实现的代码进行分析。 首先,全文检索的基本原理包括索引的创建与搜索过程。在索引创建过程中,文档首先经过分词组件Tokenizer拆分成词元Token,然后经过语言处理组件...

    Lucene原理与代码分析完整版以及找的一些资料

    再来看《Lucene原理与代码分析完整版.rar》这份资料,它可能包含对Lucene核心组件的详细解析,例如索引的创建、更新和读取过程。Lucene通过倒排索引实现高效搜索,其中,每个文档被拆分为词汇,每个词汇在索引中对应...

    lucene 原理 代码分析

    ### Lucene原理与代码分析详解 #### 全文检索的基本原理 在深入探讨Lucene的具体实现之前,我们首先需要理解全文检索系统的工作原理。全文检索技术允许用户通过输入关键词或短语来查找文档集合中包含这些词的文档...

    Lucene 原理与代码分析完整版1

    《Lucene原理与代码分析完整版1》这篇文章深入探讨了全文检索的基本原理,以及Lucene这一强大搜索引擎的内部工作机制。全文检索是现代信息技术中的一个重要领域,它为海量数据的高效检索提供了可能。以下是对该文...

    ( Lucene 原理与代码分析完整版.PDF)

    《Lucene原理与代码分析》是一本深入探讨Apache Lucene搜索引擎库的专业书籍。Lucene是Java平台上的一个全文检索库,被广泛应用于各种搜索引擎和信息检索系统中。它提供了高效、可扩展的文本搜索功能,使得开发者...

Global site tag (gtag.js) - Google Analytics