`

<转>Lucene里经常被聊到的几个话题

 
阅读更多

lvpei.cnblogs.com.自己总结的Lucene熟悉而暧昧的几个问题。


1、索引及搜索的概念

将原始数据处理成一个高效的交差引用的查找结构以便于快速的搜索。索引结构是指快速随机访问存于其内部的关键词的数据结构。

搜索是在一个索引中查找单词来找出它们所出现的文档的过程。支持单个和多个词汇的查询,短语查询,通配符,结果分级和排序。

2、lucene的核心类

核心索引类

IndexWriter唯一能写索引的类 索引的写入和索引的整体的维护 合并,优化 

Analyzer:分析文本内容,提取关键字 

Document:一个Document代表字段的集合

Field:每个Document含有一个或多个字段,具体化为Field类。是否存储,是否索引,是否分词

核心搜索类

IndexSearcher以只读方式打开索引,提供几个搜索方法,最简单的接受单个Query对象做为参数并返回一个Hits 对象。

Term是搜索的基本单元。与Field对象类似,它由一对字符串元素组成:字段的名称和字段的值。

Query q = new TermQuery(new Term(“contentslucene));

Hits hits = is.search(q); 

Query的几个子类实现就是lucene的几种搜索方式:TermQueryBooleanQuery,模糊查询PhraseQuery,前缀查询PrefixQuery, PhrasePrefixQuery, 范围搜索RangeQuery

通配符搜索WildcardQuery 

Hits类是一个搜索结果(匹配给定查询的文档)文档队列指针的简单容器。并不从索引中加载所有匹配文档。

3、提高索引效率。

可以合并索引来减少目录索引文件的数量,以提高处理索引的效率。

IndexWriter的optimize()对索引目录和缓存目录下所有的segment优化,Lucene只需要打开一个索引文件加载,效率会大大提高。

优化也会带来一些损失:耗费更多的内存和磁盘空间

MERGE_FACTOR用于子索引(Segment)合并,相当于ORAl数据库中对大批量的数据插入操作优化,值越大,索引效率越快。

RAMDirectory把一个普通的index完全读取到内存中,比真正的文件系统快很多.

尽可能对字段进行索引来提高查询速度.

4、lucene2.12.4的变动

IndexWriter 的构造器 参数多了一个字段长度,(目录,分析器,重建索引)

IndexWriter.flush()更改为commit();

Hits 命中类 3.0中会被删除。

5、分词方法

字符串匹配的分词方法(正向最大 反向匹配  最小切分 双向匹配)

词义分析(不成熟 LingPipe自然语言处理的Java开源工具包 主题概念分类)、统计分词(分词词典)。

6、lucene索引访问原则

同一时刻,lucene索引中允许有一个进程对其进行加入文档,删除文档,更新索引等操作。

同一时刻,lucene索引允许多个线程同时对其进行检索。

7、Lucene锁机制

使用commit.lockwrite.lock实现锁机制。所谓的锁其实是存放于系统临时目录内的一个文件。

建立索引 write.lock / 合并索引 commit.lock segment合并和读取

8、lucene索引文件格式

segment:一个索引中,会包含有多个segment。每个segment都有一个统一的前缀,前缀是当前索引的document数量

segments:一个完整的索引中,有且只有一个“segments”文件,记录了当前索引中所有segment的信息。

.cfs格式:复合索引格式,IndexWriter的属性:useCompoundFile,索引的内容可能非常大,文件数量可能非常的多

.tii和.tis格式:存储分词后的词条,tii是所有文件,标明了每个.tis文件中词条的位置

fnm格式:fnm格式的文件包含了Document中的所有Field名称。

.fdx和.fdt格式:域值存储表,.fdt存储具有Store.YES属性的Field数据

deletable格式:文档被删除后并不是立刻从索引中去除

nrm:标准化因子文件,索引阶段设置Document BoostField Boost,对文档评分权重

9、影响Lucene对文档评分权重的四种方式

在索引阶段设置Document BoostField Boost,存储在(.nrm)文件中。

在搜索语句中,设置Query Boost.

继承并实现自己的Similarity,实现其中的接口可以干预打分的过程

继承并实现自己的collector 。将docidscore插入一个PriorityQueue中,使得得分最高的文档先返回。

10、lucene增量索引的关键

1、数据库必须对数据是否已经索引做好标识

2、IndexWriter中有一个参数boolean类型的,用来确定是重建索引(true)还是增量索引。

原链:http://www.cnblogs.com/lvpei/archive/2010/06/17/1759652.html

分享到:
评论

相关推荐

    lucene使用教程

    Lucene是一个高性能、全功能的文本搜索引擎库,由Java编写而成,被广泛应用于各种基于文本的数据检索场景中。无论是用于网站内容搜索还是文档管理系统的全文搜索功能,Lucene都能提供强大的支持。 #### 二、Lucene...

    Java搜索引擎的研究与实现(含文档+源码)

    Java搜索引擎的研究与实现(含文档+源码)&lt;br&gt;目录 1&lt;br&gt;摘要 3&lt;br&gt;第一章 引言 4&lt;br&gt;第二章 搜索引擎的结构 5&lt;br&gt;2.1系统概述 5&lt;br&gt;2.2搜索引擎的构成 5&lt;br&gt;2.2.1网络机器人 5&lt;br&gt;2.2.2索引与搜索 5&lt;br&gt;2.2.3 Web...

    Lucenedemo

    &lt;groupId&gt;org.apache.lucene&lt;/groupId&gt; &lt;artifactId&gt;lucene-core&lt;/artifactId&gt; &lt;version&gt;8.10.1&lt;/version&gt; &lt;!-- 请根据实际版本号更新 --&gt; &lt;/dependency&gt; &lt;dependency&gt; &lt;groupId&gt;org.apache.lucene&lt;/groupId&gt; ...

    jive.chm

    &lt;br&gt;系统设计&lt;br&gt; 1 jive设计思路 &lt;br&gt; 2 jive的工作内幕 &lt;br&gt; 3 Jive源代码研究 &lt;br&gt; 4 Jive中的设计模式 &lt;br&gt; 5 jive学习笔记 &lt;br&gt;&lt;br&gt;&lt;br&gt; &lt;br&gt;设计模式&lt;br&gt; 1 大道至简-Java之23种模式一点就通 &lt;br&gt; 2 设计模式...

    springboot整合lucence完整代码

    接下来,我们需要创建一个数据模型类,这个类将被JPA映射到MySQL数据库中的表。例如,我们有一个`Article`实体类,包含标题、内容等字段: ```java @Entity public class Article { @Id @GeneratedValue(strategy...

    lucene+中文IK分词器 例子

    &lt;groupId&gt;org.apache.lucene&lt;/groupId&gt; &lt;artifactId&gt;lucene-core&lt;/artifactId&gt; &lt;version&gt;3.5.0&lt;/version&gt; &lt;/dependency&gt; &lt;dependency&gt; &lt;groupId&gt;org.apache.lucene&lt;/groupId&gt; &lt;artifactId&gt;lucene-analyzers-...

    Lucene中文分词器包

    &lt;br&gt;1. 正向全切分算法,42万汉字字符/每秒的处理能力(IBM ThinkPad 酷睿I 1.6G 1G内存 WinXP)&lt;br&gt;2. 对数量词、地名、路名的优化处理&lt;br&gt;3. 对未知词汇采用自识别结合二元切分算法,确保搜索召回率&lt;br&gt;(使用方法...

    hanlp-lucene-plugin:HanLP中文分词Lucene插件,支持包括Solr内置的基于Lucene的系统

    Maven &lt; dependency&gt; &lt; groupId&gt;com.hankcs.nlp&lt;/ groupId&gt; &lt; artifactId&gt;hanlp-lucene-plugin&lt;/ artifactId&gt; &lt; version&gt;1.1.7&lt;/ version&gt; &lt;/ dependency&gt;Solr快速上手将和共两个jar放入${webapp}/WEB-INF/li

    Lucene与javaWeb整合测试

    &lt;groupId&gt;org.apache.lucene&lt;/groupId&gt; &lt;artifactId&gt;lucene-core&lt;/artifactId&gt; &lt;version&gt;8.10.1&lt;/version&gt; &lt;!-- 请根据最新版本号更新 --&gt; &lt;/dependency&gt; &lt;dependency&gt; &lt;groupId&gt;org.apache.lucene&lt;/groupId&gt; ...

    MMAnalyzer 分词必导入jar包(lucene-core-2.4.1.jar je-analysis-1.5.3.jar)

    &lt;groupId&gt;org.apache.lucene&lt;/groupId&gt; &lt;artifactId&gt;lucene-core&lt;/artifactId&gt; &lt;version&gt;2.4.1&lt;/version&gt; &lt;/dependency&gt; &lt;/dependencies&gt; ``` 在Java代码中,你可以如下所示创建和使用MMAnalyzer: ```java ...

    Lucene索引的基本操作

    &lt;groupId&gt;org.apache.lucene&lt;/groupId&gt; &lt;artifactId&gt;lucene-core&lt;/artifactId&gt; &lt;version&gt;8.10.1&lt;/version&gt; &lt;/dependency&gt; &lt;dependency&gt; &lt;groupId&gt;org.apache.lucene&lt;/groupId&gt; &lt;artifactId&gt;lucene-analyzers-...

    Lucene:基于Java的全文检索引擎简介

    Lucene不是一个完整的全文索引应用,而是是一个用Java写的全文索引引擎工具包,它可以方便的嵌入到各种应用中实现针对应用的全文索引/检索功能。&lt;br&gt;Lucene的作者:Lucene的贡献者Doug Cutting是一位资深全文索引/...

    lucene简单代码列子

    Lucene是一个高性能、全文本搜索库,由Apache软件基金会开发,被广泛应用于各种搜索引擎的构建。它提供了一个简单的API,使得开发者可以方便地在自己的应用程序中集成全文检索功能。本文将通过一个简单的代码例子,...

    Lucene查询工具LQT.zip

    Lucene Query Tool (lqt) 是一个命令行工具用来执行 Lucene 查询并对结果进行格式化输出。 使用方法: $ ./lqt usage: LuceneQueryTool [options] --analyzer &lt;arg&gt; for query, (KeywordAnalyzer | ...

    lucene 简单例子

    &lt;groupId&gt;org.apache.lucene&lt;/groupId&gt; &lt;artifactId&gt;lucene-core&lt;/artifactId&gt; &lt;version&gt;8.10.1&lt;/version&gt; &lt;!-- 使用最新版本 --&gt; &lt;/dependency&gt; &lt;dependency&gt; &lt;groupId&gt;org.apache.lucene&lt;/groupId&gt; ...

    Lucene建立索引及查询包含“java”关键字 示例代码

    &lt;groupId&gt;org.apache.lucene&lt;/groupId&gt; &lt;artifactId&gt;lucene-core&lt;/artifactId&gt; &lt;version&gt;8.10.1&lt;/version&gt; &lt;/dependency&gt; &lt;dependency&gt; &lt;groupId&gt;org.apache.lucene&lt;/groupId&gt; &lt;artifactId&gt;lucene-analyzers-...

    最新版windows lucene-8.5.1.zip

    &lt;groupId&gt;org.apache.lucene&lt;/groupId&gt; &lt;artifactId&gt;lucene-core&lt;/artifactId&gt; &lt;version&gt;8.5.1&lt;/version&gt; &lt;/dependency&gt; &lt;!-- 其他相关模块如-analyzers-common, -queryparser等根据需求添加 --&gt; ``` 三、Lucene...

    lucene-pdf:一个能够轻松对 PDF 文本和元数据进行 Lucene 索引的库

    将它添加到您的 Maven 项目的pom.xml : &lt; dependency&gt; &lt; groupId&gt;com.snowtide&lt;/ groupId&gt; &lt; artifactId&gt;lucene-pdf&lt;/ artifactId&gt; &lt; version&gt;3.0.0&lt;/ version&gt;&lt;/ dependency&gt; 或者,将上述 Maven 工件坐标添加到...

    用lucene对数据库建立索引及搜索

    &lt;title&gt;使用 Lucene.net 建立简单的数据库搜索程序&lt;/title&gt; &lt;!-- ... --&gt; &lt;/HEAD&gt; &lt;body MS_POSITIONING="GridLayout"&gt; &lt;form id="Form1" method="post" runat="server"&gt; &lt;table width="100%" border="0"&gt; ...

Global site tag (gtag.js) - Google Analytics