lucene的配置与使用

上传人:飞*** 文档编号:48664767 上传时间:2018-07-19 格式:PPTX 页数:104 大小:322.56KB
返回 下载 相关 举报
lucene的配置与使用_第1页
第1页 / 共104页
lucene的配置与使用_第2页
第2页 / 共104页
lucene的配置与使用_第3页
第3页 / 共104页
lucene的配置与使用_第4页
第4页 / 共104页
lucene的配置与使用_第5页
第5页 / 共104页
点击查看更多>>
资源描述

《lucene的配置与使用》由会员分享,可在线阅读,更多相关《lucene的配置与使用(104页珍藏版)》请在金锄头文库上搜索。

1、Lucene分享褚书金 2012-11-08前言 本PPT共分5个部分,有浅到深逐步介绍 lucene。让大家对lucene有个初步的了解、 并能根据实例了解在开发中快速使用lucene 。目录录 第一部分 基础介绍篇 1.Lucene介绍及下载 2.Lucene jar包获取及说明 3.Lucene与应用程序结合 4.Lucene倒排序 5.Lucene索引文件结构介绍 6.中文分词 第二部分 核心API介绍篇 1. 索引建立1.1.Directory1.2.Analyzer1.2.IndexWriter1.3.Document1.4.Field 2.索引搜索2.1 IndexReader2

2、.2 IndexSearcher2.3 TopDocs2.4 Scorer3.lucene多样化查询 3.1 TermQuery 基本查询 3.2 TermRangeQuery,NumicRangeQuery 范围查询 3.3 BooleanQuery 组合查询 3.4 WildcardQuery 通配符查询 3.5 PhraseQuery 短语搜索 3.6 FuzzyQuery搜索类似项 3.7 PrefixQuery 字符串前缀搜索 3.8 解析查询表达式 3.9 多域多条件查询 第三部分 搜索技术篇1.建立索引流程 2.搜索流程 3项目搜索实例 4.luke工具介绍 第四部分 应用篇1.

3、Lucene评分机制 2.域缓存FieldCache 3.排序 Sort 4.过滤器 5.近似实时搜索 6.停止较慢搜索 7.多索引文件搜索 8.高亮词显示 第五部分 性能调优篇1.简单性能调优步骤 2.多线程和并行处理 3.热备份索引第一部分 基础介绍篇1. 1.Lucene介绍及下载 Lucene介绍-lucene是一款高性能的、可扩展,纯java语言编 写的信息检索(IR)工具库。-它适合几乎任何需要全文本搜索(特别是跨平台 )的应用程序。 下载地址http:/lucene.apache.org/java1. 2.Lucene jar包及说明 lucene-core-3.1.0.jar

4、核心包 lucene-highlighter-3.1.0.jar 高亮包 lucene-analyzers-3.1.0.jar Lucene自带的分词 解析包: lucene-queries-3.1.0.jar搜索条件包 IKAnalyzer3.2.3Stable.jar IK中文分词包1. 3.Lucene与应用程序结合1. 4.Lucene原理lucene是基于关键词索引和查询. 全文分析:把文本解析为一个个关键字存储到索引 文件中。 倒排索引: (英语:Inverted index),也常被称为 反向索引、置入档案或反向档案,是一种索引方法 ,被用来存储在全文搜索下某个单词在一个文档或

5、者一组文档中的存储位置的映射。它是文档检索系 统中最常用的数据结构。 设有两篇文章1和2 文章1的内容为: Tom lives in Guangzhou,I live in Guangzhou too. 文章2的内容为: He once lived in Shanghai.1)全文分析 首先我们要取得这两篇文章的关键词,通常我们需要如下处理措施 a.我们现在有的是文章内容,即一个字符串,我们先要找出字符 串中的所有单词,即分词。英文单词由于用空格分隔,比较好 处理。中文单词间是连在一起的需要特殊的分词处理。 b.文章中的”in”, “once” “too”等词没有什么实际意义,中文中的 “的”

6、“是”等字通常也无具体含义,这些不代表概念的词可 以过滤掉 。 c.用户通常希望查“He”时能把含“he”,“HE”的文章也找出来, 所以所有单词需要统一大小写。 d.用户通常希望查“live”时能把含“lives”,“lived”的文章也找出 来,所以需要把“lives”,“lived”还原成“live” e.文章中的标点符号通常不表示某种概念,也可以过滤掉 在lucene中以上措施由Analyzer类完成经过上面处理后 文章1的所有关键词为:tom live guangzhou i live guangzhou 文章2的所有关键词为:he live shanghai 2) 倒排索引:有了关

7、键词后,我们就可以建立倒排索引了。上面的对应关系是:“文章号”对“文章中所有关键词”。 倒排索引把这个关系倒过来,变成:“关键词关键词”对对“拥有该关键拥有该关键 词的所有文章号词的所有文章号”。 文章1,2经过倒排后变成 关键词键词文章号guangzhou1He2Live1,2Shanghai2Tom1通常仅知道关键词在哪些文章中出现还不够,我们还需 要知道关键词在文章中出现次数和出现的位置,通常 有两种位置: a)字符位置,即记录该词是文章中第几个字符(优点是 关键词亮显时定位快); b)关键词位置,即记录该词是文章中第几个关键词(优 点是节约索引空间、词组(phase)查询快),luce

8、ne 中记录的就是这种位置。 加上“出现频率”和“出现位置”信息后,我们的索 引结构变为: 关键词键词文章号出现频现频 率出现现位置guangzhou123,6he211i114live 1 2 2,52 1 2shanghai 2 1 3tom 1 1 1以live 这行为例我们说明一下该结构:live在文章1中出现了2次 ,文章2中出现了一次,它的出现位置为“2,5,2”这表示什么呢 ?我们需要结合文章号和出现频率来分析,文章1中出现了2次 ,那么“2,5”就表示live在文章1中出现的两个位置,文章2中出 现了一次,剩下的“2”就表示live是文章2中第 2个关键字。1.5.Lucene

9、索引文件结构介绍 Lucene两种索引结构:多文件索引结构和复合文件索引结构。 多文件索引结构由多个文件来表示索引 索引段:lucene索引由一个或多个段(segments )组成,而每个段由多个索引文件组成。 剖析索引文件 1)段文件(sements_x):段文件保存了所有现 有索引段的名称以及相关信息。每次当 IndexWriter向索引提交修改之前,段文件的 值都会增加。 2)域名(.fnm): .fnm文件存储了段中相关文档所包含的所有 域名。每个域名都要一个标志位。3)项词典(.tis .tii)段中索引的项(域名和域值构成的元组)都保 存在tis文件中。4)项频率(.frq) 记录

10、每个域名出现的次数 5)项位置(.prx) 6)域存储(.fdx .fdt).fdx文件包含了简单的索引信息,该信息用 来将该域对应的文档号保存至.fdt文件中对 应的位置。 .fdt文件存储该域的内容。7)项向量(.tvf .tvd .tvx).tvf 文件负责存储按照字母排序后的特定项 已经对应的项频率,另外还有可选的项位 置及其偏移量。 .tvd文件存储针对给定文档的域的项向量列 表,同时还负责将该域的字节偏移量写入. tvf文件以便需要时能检索大该域。 .tvx文件包含索引信息,该信息会将文档编 号转换为byte格式的位置信息并存储于.tvf 和.tvd文件。8) Norms.nrm文

11、件包含了索引期间获取的用户加权信 息的归一化因子。每个文档都在.nrm文件 中占有一个字节的空间。保存的内容为编 码后的文档加权,域加权,基于域内容长 度的归一化因子等内容的联合体。 9)文档删除 若删除一个文档,则lucene程序产生一个. del格式的文件。名称为_X_N.del(其中X表示 段名称,N是一个整数,每进行一次删除, N的值加1)。该文件还未每个删除后的文档 设置了一个标志位。 复合索引:将多个索引文件压缩成一个文 件(后缀名为cfs)。 怎样创建复合索引?indexwriter.setUseCompoundFile(true);和版本 有关? 。转换索引结构调用indexw

12、riter类的setUseCompoundFile()方 法。1. 6.中文分词词 参考IK中文分词pdf第二部分 核心API介绍篇接口说说明org.apache.Lucene.search/搜索入口org.apache.Lucene.index/索引入口org.apache.Lucene.analysis/语言分析器org.apache.Lucene.queryPar ser/查询分析器org.apache.Lucene.documen t/存储结构org.apache.Lucene.store/ 底层IO/存储结构2.1.1.Directory对象 Directory类 描述了Lucene

13、索引的存储位置。 它是一个抽象类。 最常用的子类FSDirectory和RAMDirectory.Directory dir=FSDirectory.open(file);Directory ramDir=RAMDirectory.open(file);2.1.2Analyzer对象Analyzer类 -文本文件在被索引之前,需要经过Analyzer( 分析器)处理。 -Analyzer是由IndexWriter的构造方法来指定的 ,它负责从被索引文本文件中提取语汇单 元,并提出剩下的无用信息。 -如果被索引内容不是文本文件,需要将其转 换为文本文件。2.1.2Analyzer对象-分析过程

14、A将文本转换为语汇单元过程。 B步骤:提取单词去除标点符号去除 字符上面的标点符号规范化(将字母转 换小写)去除常用词语汇单元化(词 干还原:将单词还原成词干形式,或将单词 还原成基本形式)2.1.2Analyzer对象-几种常用lucene分析器分析器内部操作步骤骤WhitespaceAnaly zer根据空格拆分语汇单 元。SimpleAnalyzer根据非字母字符拆分文本,并将其转换为 小写形式。StopAnalyzer根据非字母字符拆分文本,然后小写化,再移除停用 词。KeywordAnalyzer将整个文本作为一个单一语汇单 元处理。StandardAnalyzer基于复杂的语法来生

15、成语汇单 元,该语法能识别E-mail 地址、首字母缩写词、汉语/日语/韩语字符、字母数字 等。还能完成小写转换和移除停用词。IKAnalyzer中文分词2.1.3IndexWriter对象Indexwriter类 -IndexWriter(写索引)是索引过程中的核心组 件。负责创建新索引或打开已有索引、以 及向索引中添加、更新、删除被索引的信 息。 -IndexWriter需要开辟一定空间来存储索引, 该功能可以有Directory完成。 -IndexWriter是线程安全的。-常用api a.构造函数IndexWriter(Directory d, IndexWriterConfig co

16、nf) b.方法 void addDocument(Document doc) void addDocument(Document doc,Analyzer analyzer) void addIndexes(Directory. dirs) void deleteAll() void deleteDocuments(Query. queries) void deleteDocuments(Query query) void deleteDocuments(Term term) Analyzer getAnalyzer() Directory getDirectory() static boolean isLocked(Directory directory) int numDocs() void updateDocument(Term term, Document doc)

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 其它文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号