`

<转>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

分享到:
评论

相关推荐

    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...

    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 设计模式...

    Lucene中文分词器包

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

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

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

    Lucene查询工具LQT.zip

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

    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-1.4.3

    包括lucene-1.4.3.src和lucene-1.4.3.zip&lt;br&gt;其中lucene-1.4.3.zip中含有lucene-1.4.3.jar&lt;br&gt;

    X3-BLOG 0.8beta

    使输出数据的格式定义更灵活&lt;br&gt; * 修改了日志评论的静态存储结构加入了索引路径,使其更符合SEO&lt;br&gt; * 取消了不成熟的外挂搜索引擎接口&lt;br&gt; * 开放了搜索页的直接地址,可以被搜索引擎找到&lt;br&gt;&lt;br&gt;更多资料请访问官方...

    LoremIpsumSearch:包含与 lucene 和 solr 一起使用的搜索算法

    LoremIpsum搜索 包含与 lucene 和 solr 一起使用的搜索算法... export CLASSPATH="&lt;lucene&gt;/lucene/replicator/lib/*:&lt;nutch&gt;/build/*:&lt;nutch&gt;/build/lib/*:&lt;lucene&gt;/solr/dist/*:&lt;lucene&gt;/solr/ dist/solrj-lib/*:*:.

    开发自己的搜索引擎《lucene2.0+heritrix》一书对应的源码资料

    开发自己的搜索引擎《lucene2.0+heritrix》一书对应的源码资料,总共有30M,只上传了几个例子.&lt;br&gt;ch2-lucene入门小例子&lt;br&gt;myReserch-可用的网络搜索引擎

    供lucene初学者学习的几个类

    供lucene初学者学习的几个类 包括建索引、查询等关键操作

    Javaweb课程作业基于Hadoop的中文词频统计工具源码+使用说明.zip

    &lt;groupId&gt;org.apache.lucene&lt;/groupId&gt; &lt;artifactId&gt;lucene-core&lt;/artifactId&gt; &lt;version&gt;3.6.0&lt;/version&gt; &lt;/dependency&gt; 3、将IKAnalyzer.cfg.xml和stopword.dic复制到项目根目录 4、配置用户自定义词库 (1)...

    lucene相关十几个包

    lucene相关十几个包。

    semantic-vectors-lucene-tools:用于为语义向量建立Lucene索引的工具

    用于语义向量的Lucene工具允许根据有关Seldon MySQL数据库中项目(例如电影,文章)的元数据创建Lucene索引。...item-limit &lt;item&gt; -jdbc &lt;JDBC&gt;&lt;lucene&gt; :在其中重新创建lucene索引的文件夹&lt;attr&gt;

    lucene分词测试代码

    用java写的图形分词测试的小东西,用的分词器是:&lt;br&gt;来自“猎图网 www.richmap.cn”基于IKAnalyzer分词算法的准商业化Lucene中文分词器,其使用“正向全切分算法”,42万汉字字符/每秒的处理能力(IBM ThinkPad 酷睿I...

    lucene实例lucene实例

    lucene实例lucene实例lucene实例lucene实例lucene实例lucene实例lucene实例lucene实例lucene实例

    Lucene下调试通过的简单程序

    自已在Lucene下调试通过的简单程序, 能完成文档的的索引和搜索.&lt;br&gt;代码很简单,未加文档,不过能看懂. &lt;br&gt;在Lucene2.2.0下调试通过

    LuceneInAction源码

    Lucene In Action 即&lt;&lt;Lucene实战&gt;&gt;的源码

    Luke-lucene index toolbox

    Current version is 0.8.1, released on 13 Feb 2008.&lt;br&gt;It uses the official Lucene 2.3.0 release JARs.

    compass包及相关学习资料

    Compass是一个强大的,事务的,高性能的对象/搜索引擎映射...内容包括compass的jar包及从网上搜集的相关学习资料.&lt;br&gt;附两个不错的资料地址:&lt;br&gt;http://www.blogjava.net/hellboys/archive/2006/05/31/49311.aspx&lt;br&gt;...

Global site tag (gtag.js) - Google Analytics