Lucene技术

2024-05-19

Lucene技术(共7篇)

Lucene技术 篇1

摘要:垂直搜索引擎又叫专题搜索引擎、专业搜索引擎。主要研究了下一代的搜索引擎——垂直搜索引擎, 并基于Lucene技术开发了一个垂直搜索引擎, 对信息检索的速度和最终结果的排序都进行了改进。同时给出了专业网络爬虫Spider的算法。

关键词:垂直搜索引擎,Lucene,Spider

1 垂直搜索引擎

1.1 垂直搜索引擎的特点

垂直搜索引擎又称为专题搜索引擎、专业搜索引擎。它们专门采集某一学科、某一主题、某一行业范围的信息资源, 并用更为详细和专业的方法对信息资源进行标引和描述, 且往往在信息组织时设计利用与该专业密切相关的方法技术。这种搜索引擎专注于自己的特长和核心技术, 保证了对该领域信息的完全收录与及时更新, 在提供专业信息方面有着大型通用搜索引擎无法比拟的优势。它的服务对象通常是专业领域的研究人员。众所周知, 每个专业领域都有专有的词汇和用语, 垂直搜索引擎使用与之相应的索引技术和检索语言, 从而使在特定主题范围内的检索效果优于通用搜索引擎。垂直搜索引擎因针对性强、目标明确和查准率高而成为获取专业信息的重要工具。

1.2 垂直搜索引擎的系统结构

垂直搜索引擎主要由主题爬虫模块、索引模块、检索模块、用户接口等4个部分组成, 如图1所示。

2 Lucene技术简介

Lucene作为一个优秀的全文检索引擎, 它的系统结构具有强烈的面向对象特征。首先是定义了一个与平台无关的索引文件格式, 其次通过抽象将系统的核心组成部分设计为抽象类, 具体的平台实现部分设计为抽象类的实现, 此外与具体平台相关的部分比如文件存储也封装为类, 经过层层的面向对象式的处理, 最终达成了一个低耦合高效率, 容易二次开发的检索引擎系统。

2.1 Lucene的系统结构组织

Lucene的系统由基础结构封装、索引核心、对外接口三大部分组成。其中直接操作索引文件的索引核心又是系统的重点, 如图2所示。

Lucene每个包完成的特定功能, 如表1所示:

2.2 Lucene的特点

Lucene作为一个全文检索引擎, 其具有如下突出的优点:

(1) 索引文件格式独立于应用平台。Lucene定义了一套以8位字节为基础的索引文件格式, 使得兼容系统或者不同平台的应用能够共享建立的索引文件。

(2) 在传统全文检索引擎的倒排索引的基础上, 实现了分块索引, 能够针对新的文件建立小文件索引, 提升索引速度。然后通过与原有索引的合并, 达到优化的目的。

(3) 优秀的面向对象的系统架构, 使得对于Lucene扩展的学习难度降低, 方便扩充新功能。

(4) 设计了独立于语言和文件格式的文本分析接口, 索引器通过接受Token流完成索引文件的创立, 用户扩展新的语言和文件格式, 只需要实现文本分析的接口。

(5) 已经默认实现了一套强大的查询引擎, 用户无需自己编写代码即使系统可获得强大的查询能力, Lucene的查询实现中默认实现了布尔操作、模糊查询 (Fuzzy Search[11]) 、分组查询等等。

3 垂直搜索引擎系统的设计与实现

笔者基于Lucene设计了一个垂直搜索引擎, 该系统包括了4个模块:信息采集、信息索引、信息检索种用户接口。

3.1 信息采集

由于Lucene本身没有网络爬虫 (Spider) , 需要我们自己重新设计一个专业网络爬虫 (Spider) , 然后集成到Lucene中。然后利用Spider从所有相关的专业网站库 (HTML库) 中抓取网页, 根据相关度分析算法, 对网页进行主题相关度分析, 根据相关度的不同来抓取相关网页, 最后把有效网页信息传输给索引器。

信息采集模块主要有3个类:

(1) Spider Frame类。Spider Frame类的功能:用户的输入界面。包括起始URL、文件保存目录、最多处理网页个数、启动线程个数, 线程休眠时间。可以停止Spider的运行。

(2) Show Frame类。Show Frame类的功能:Spider运行后, 显示运行的状态信息、可以停止Spider运行。

(3) Spider类。集成到Lucene中的信息采集类, 由Spider Frame类调用。有一个create () 方法, 执行实际的网页爬行工作。

信息采集模块的主要代码如下:

//此处创建Spider对象, initurl是起始URL, pagenum是最大可访问网页数,

3.2 信息索引

一个搜索引擎的有效性在很大程度上取决于索引的质量。索引模块将Spider收集的文档进行处理, 以便于组织查找到的有效数据结构。因此, 必须对索引进行高效组织, 以实现整个搜索引擎的高效率。

索引器主要完成将切词形成的顺排档文档组织成倒排档索引数据。索引的建立即索引器的实现, 主要分两步, 因为只有符合Lucene.Document要求的文档才能使用Lucene对其建立索引, 所以首先构造一个Document的文档对象doc, 其中包括描述数据域和正文数据域。然后对该doc文档建立索引, 对于描述数据, 因其体积小, 占字段多, 被检索率高, 所以直接存入索引库中, 而庞大的正文数据仅将其存放地址和文件名等存入索引库中。

3.3 信息检索

Lucene提供用户的检索接口是Index Searcher类, 由Query类封装查询词、查询字段和语言分析器, 交由Index Searcher查询。搜索结果返回的是Hits对象。

3.4 用户接口

用户接口提供可视化的查询输入和结果输出界面。采用JSP实现。

输入用户查询, 调用检索器, 将检索器返回的查询结果 (Hits) 分页显示在页面上, 同时使用Lucene中的Token信息对用户的查询字符高亮显示, 方便用户查看。

4 结束语

Lucene是一个基于Java的全文检索引擎工具包, 它不是一个完整的搜索引擎, 只提供了完整的查询引擎和索引引擎以及部分文本分析引擎。本系统在Lucene的基础上整合了专业网络爬虫Spider和Web服务器.建立了一个完整的垂直搜索引擎实例, 其组织比较完整, 查询功能强大.检索速度快, 搜索精度较高。在今后的研究中, 将在此系统的基础上.改进Spider, 使得Spider可以抓取由Javascript动态生成的网页内容;对Lucene中的检索结果排序算法进行改进以提高搜索精度。

参考文献

[1]孙西全, 马瑞芳, 李燕灵.基于Lucene的信息检索的研究与应用[J].信息系统, 2006, 29 (1) .

[2]郎小伟, 王申康.基于Lucene的全文检索系统研究与开发[J].计算机工程.2006 (2) .

[3]李晓明, 闫宏飞, 王继民.搜索引擎-原理、技术与系统[M].北京:科学出版社, 2005.

[4]Erik Hatcher, Otis Gospodetic.Lucene In Action[M].Manning Publications Co.2005.

[5]Namiar.Theory of Search Engine[J].Computers and Mathematics with Applications, 2001, 42 (12) .

Lucene技术 篇2

关键词:垂直搜索引擎,主题爬虫,中文分词,Lucene,搜索结果个性化

引言

据不完全统计, 在农业领域现有各种网站近2万多个, 涉及农、林、牧、渔、水利、气象、农垦、乡镇企业、及其它农业部门, 在这些海量的信息中, 如何搜索一个准确的信息是大家非常关注的问题。在农业信息化的年代, 越来越多的农业相关的信息出现在各大网站, 很多农民朋友对大部分的农业门户网站并不熟悉, 且检索技巧不高, 加上通用搜索引擎返回的搜索结果数量巨大, 与主题相关性差的现实情况, 通用搜索引擎越来越难以满足农民朋友的检索需求。建立一个农业领域垂直搜索引擎, 让农民朋友快速、简捷、高效地获取分布在网络上的农业信息资源成了一项比较有意义的工作。

一、基于Lucene的农业类搜索引擎的体系结构设计

1.1基于Lucene的农业类搜索引擎整体体系结构。

在搭建基于Lucene的农业类搜索引擎的主要功能模块包括:主题爬虫模块、索引模块、检索模块以及搜索结果在线聚类模块[1]。其中索引模块和检索模块都在Lucene中有比较好的封装块, 针对Lucene对中文不能很好支持的缺点, 只需要提出更好的分词模块进行替换即可。本文主要的功能模块有数据采集模块、清洗分词索引模块以及前台的个性化展现模块。

数据采集模块通过改进的主题爬虫抓取农业主题相关的数据, 通过对解析出的URL进行主题相关性判断, 使得主题爬虫的准确率得到提高同时也减少了无效的抓取;数据清洗索引模块都是在Lucene框架中完成, 作为一个优秀的全文检索框架, 在最后的搜索结果个性化展现模块, Lucene中对检索功能的实现, 没有考虑个性化的需求, 根据文档的真实权重即td*idf来表示文档的重要性并按重要性将检索的结果集进行展现, 考虑到搜索引擎存在的一些问题, 将查询得到的结果集进行适当的处理如聚类也是提高用户体验的非常有用的一种途径。

1.2基于Lucene的农业类搜索引擎关键技术。

影响搜索引擎性能的主要因素有爬虫设计技术、中文分词技术等。接下来对这些关键技术进行简单的介绍。

1.2.1主题爬虫工作原理。

通用爬虫的工作原理是为了尽可能多的搜集网络上各种主题的信息, 设置爬虫按照一定的爬行策略进行爬行, 比如深度优先算法、广度优先算法等, 对爬得的网页通过分析网页的链接关系继续提取URL放入处理链表, 直到访问完所有的链接。它的目标是尽可能全、快的爬取网络上的资源, 同时按照一定的策略更新已经搜集的旧信息, 避免无效链接和死链接[2]。

表1对两种类型的爬虫从目标、爬行策略、页面分析技术、各自的优缺点、是否定期回访等方面进行了比较。

1.2.2中文分词技术。

分词技术指对文本进行分割为合理的词语或者单词序列, 在英文中, 词与词之间存在着空格, 使得分词比较容易执行, 在Lucene中提到的单字词切分主要就是针对英文提出的。中文分词技术从算法的角度可以分成三类, 基于字符串匹配的分词 (机械分词) 方法, 基于理解的分词方法和基于统计的分词方法。随着人工智能和机器学习中一些算法的成熟, 神经网络、遗传算法、决策树方法等被用在中文分词中[3]。

1.2.3查询服务。

现在的搜索引擎从用户输入关键字到得到返回结果的主要过程是:1) 在以基于关键字查询为主的搜索引擎中, 用户通过输入若干个关键字或者一小段文本进行查询;2) 搜索引擎通过对用户输入的查询信息进行分词、去除停用词等处理步骤, 得到有意义的检索关键字集, 通过与索引库中索引进行匹配, 对每个关键字匹配得到的文档集求交集, 即为最终应该返回的结果。这种交集型处理的方法是基于用户希望搜索尽可能多的包含指定关键字的文档。3) 通过一定的排序算法, 将上一步得到的文档进行排序。

二、多策略农业主题爬虫设计

2.1多策略农业主题爬虫的算法描述。

U R L决策器, 对页面分析出来的所有链接中, 首先按照host判断是否在所给定的8000多个中, 若不是则将该链接加入人工审核链中;若是, 继续判断path部分假如能在站点树中找到则加入处理链, 若不能则按照下面的判断方法判断是否主题相关。算法的流程图见图1。

1) 若当前URL为一级目录。判断是否与根结点相同:相同, 且已经存在则不用添加;若不同, 判断是否在已经收集的农业门户网站集中, 若存在于门户网站集中创建一个单独的树形结构, 由另外的线程进行抓取。

2) 若该URL是二级目录的形式, 首先对host部分根据步骤1) 判断, 若已存在则继续对path1进行主题相关性判断。

判断的方法:树形结构中的每个结点都有一个关键字数组, 每个数组中的值这样规定:对锚进行分词, 统计关键词的次数, 每个结点的关键字集合分别来自各个直接子节点的关键字集。显然根结点的关键字是整棵树中关键字集的并集。对当前URL的锚信息分词后的关键字信息与根结点的关键字集用向量空间的方法计算相似度, 满足一定的阈值, 则将该URL插入。

3) 对于URL的长度大于二级目录的可以用步骤2) 相同的方法进行处理。

4) 影响U R L优先级的主要参数有所在的树形结构的层级和主题相似度值。优先级显然是与相似度成正比。所在层级越低则越先加入处理链, 原因越是靠近叶子结点的URL若先下载的话, 该页面包含的链接信息比较少, 则能提供给根结点的关键字越少, 对后续页面与主题相关性计算的帮助也越小。假如网站的深度为A, 规定从根结点开始的各层的值分别是是调节系数。通过实验来设置a和b的初始值。

5) 每次执行完URL的插入操作后, 根据URL的优先级值将URL插入到URL等待链。

为了能够方便地处理链接和主题相关度的计算, 需要使用5个URL链, 每个链保存着统一处理状态的URL[4]。之所以采用链表的形式, 便于按照网页的优先级值对各个URL链进行排序, 特别是对处理链进行排序, 可以优先爬去与主题相关的网页, 这样设计使得爬虫的终止条件不唯一, 且保证了重要的网页优先被抓取。图2为网页抓取过程这些状态的切换流程。

2.2算法分析。

多策略农业主题爬虫从理论上来看, 具有如下几个特点:多种策略、可控制性、较小的网络开销、较小的实现代价。另外, 在计算网页重要度的时候, 通过考虑链接所在的层次作为该链接重要度的一个指标, 充分利用了链接层次与网页重要度的潜在信息。

通过分析以上特点, 理论上来说该算法具有一定的可行性。结合实验主要分析两个方面:一方面是该算法在维持主题相关性方面的效果, 即所抓取的网页是否是与主题有较高的相关性;另一方面, 评价该算法对重要网页的挖掘能力, 即首先用一种较客观的方法Page Rank算法或者Hits算法获得每个主题下所有网页重要性列表, 这两种算法都是通过分析网页之间的链接结构来计算网页重要度的, 所得到的每个主题对应的重要网页列表, 作为评价爬虫挖掘重要网页能力的依据。实验测试部分将在下一步展开。

三、对Lucene中文分词算法的扩展及其实现

本文提出了用二元语法模型和Viterbi算法实现的中文分词模型, 该方法首先将预切分文本分割成元句子的形式, 然后将每个元句子切分成原子的形式, 对每个元句子切分得到的原子根据二元语法模型, 匹配词典得到所有可能的切分路径, 然后调用相应的未登录词识别模块, 采用Viterbi算法求得概率最大的切分结果。最后通过随机抽取的语料进行测试, 结果表明该方法是有效的。

3.1分词算法原理。

1) 将待处理文本切割成元句子 (指两个切割标志之间的文本) 的形式;2) 对单个元句子分割成原子成分, 对各个原子成分和该原子的标记分别存放在两个数组;3) 对步骤2得到的盛放原子成分的数组进行初步处理, 得到除未登录词之外的切分形式;4) 对步骤3得到的结果用viterbi算法求出最佳切分路径, 调用未登录词识别模块;5) 若判断得到当前未登录词是人名, 则调用人名识别模块;若判断得到当前未登录词是地名, 则调用地名识别模块;若判断得到当前未登录词是组织名, 则调用组织名识别模块。6) 对处理结果进行词性标注等处理后返回。中文分词部分算法总体流程图见图3。

3.2算法详细步骤。

算法涉及到的类主要有Seg Graph.java, Tagger.java、Unknow Word Org.java, Unknow Wor_d Place.java、Unknow Word Person.java、Unknow Word Transperson.java等。Seg Graph.java主要实现步骤在前三步, Tagger.java是主要的控制类, 在步骤3的基础上对不同种类的未登录词分别调度不同的算法来识别, 其中Unknow Word Org.java、Unknow Word Place.java、Unknow Word Person.java、Unknow Word Transper_son.java分别是组织名、地名、中国人名、外国人名的识别模块[5]。

对单个元句子分割成原子成分, 对各个原子成分和该原子对应的标记分别存放在两个数组;对可能包含数字 (可能是整数或者小数) 、单个英文字符、汉字以及一些特殊字符如Ⅷ等分别进行判断。对元句子中的每个字符首先获取该字符的类型, 然后判断是否是英文字符、索引、整数或者小数、汉字等等, 将得到的这些类型的原子依次放入数组atom[], 将该原子所对应的类型标记分别存入数组atom POS[]。

对得到的原子成分进行初步处理, 得到除未登录词之外的切分形式, 形成分词后得到分词网络End List seg Graph。主要步骤如下:首先进行原子分词, 接着进行全切分即找出原子之间所有可能的组合。该过程使用的算法由两个循环来实现:第一层遍历整个原子集合;第二层在找到一个原子时, 不断把后面相邻的原子和该原子组合到一起, 访问词典看它们能否构成一个有意义的词组。全切分得到的结果为:“使/使用;用/用户;户;满/满意;意”, 将之转化为相应的有向无环图。使用维特比viterbi算法对有向无环图进行求解。当N=2时, 得到的“使/用户/满意”和“使用/户/满意”。

在实际的应用系统中单个词的概率值都比较小, 将各个词的概率相乘最终得出的概率趋于零, 使得最终难以比较各个切分结果的概率。常用的处理方法是用概率的负对数来代替概率本身, 词的概率的对数是负数, 取反则变成了正数, 通常将这个正数称作该词的“费用”。在用viterbi算法求最佳切分路径时, 只需找到总费用最小的路径。

四、总结

本文对搜索引擎以及垂直搜索引擎相关技术进行系统的研究, 特别是垂直搜索引擎的主题爬虫技术、中文分词技术以及搜索结果的在线聚类技术进行了详细的理论阐述、算法研究。简要介绍了Lucene中的中文分词技术, 随后提出了一种基于二元语法模型和维特比算法的中文分词算法。这种算法是对普通一元语法模型和最大概率法的改进, 通过维特比算法求最佳切分路径。通过分析搜索引擎在个性化方面存在的一些问题和目前的研究现状, 通过分析现有的文本聚类算法特别是比较适合在线搜索结果聚类的两种算法, 在实验阶段, 通过比较两种算法在聚类效果以及聚类标签描述方面的能力, 通过改变聚类文本集的大小设置三组实验。实验证明, STC算法和Lingo算法在处理小数据量时都能满足需求, 但是随着数据量的增大, 两种算法在某些方面有待改进。

参考文献

[1]Tanudjaja F, Mui L, Persona:A contextualized and Personalized Web Search.35th Annual Hawaii International Conference on System Sciences, 2002.

[2]刘艳华, 徐勇.不同搜索引擎在农业领域的应用效果对比[J].农业网络信息.

[3]周鹏, 吴华瑞, 赵春江, 等.基于Nutch农业搜索引擎的研究与设计[J].计算机工程与设计, 2009 (03) :56.

[4]郭来德, 刘辉林, 刘兰哲, 等.农业信息搜索引擎设计与实现[J].河北工程大学学报 (自然科学版) , 2007 (03) :33-34.

Lucene技术 篇3

关键词:农作物生产技术服务平台,Lucene.net,中文分词

传统的农作物栽培过程中,农民种植大多凭借个人的主观经验,或靠农技人员的手口相授,农户之间的口口相传,没有形成完整的生产技术知识体系,严重影响了农作物的产量。针对这一现状,提出建设农作物生产技术服务平台。平台主要提供各种涉农信息及农业生产新技术的普及,方便农户查询、学习先进生产技术、病虫害防治技术,并应用于生产实践。在功能上,除了实现业务功能之外,还需为农户提供高效的对生产技术、病虫草害防治技术的查询检索功能。

基于上述需求,传统的解决方案是通过全文检索来提供对信息的查询功能。但传统的全文检索是以文档的全部文本信息作为检索对象的一种信息检索技术。不考虑文档的具体内容而仅仅判断是否包含被检索关键词,灵活性不强。本文针对上述需求及传统解决方案的不足,基于Lucene.Net设计和实现了农作物生产技术服务平台全文搜索引擎。

1 农作物生产技术全文搜索引擎的框架设计

我们在数据访问层开发满足上述需求的搜索引擎,通过对Lucene.Net的操作接口和数据访问接口的封装,为农户对生产技术、病虫草害防治技术的检索提供查询接口。

1.1 农作物生产技术知识获取与知识库的建立

平台数据的表现形式主要分为描述性文本数据和图谱数据及视频数据三类。以现有农作物科技信息作为平台系统的知识基础,选取领域农业专家正式出版的教材、图谱和视频等信息资源,围绕农作物生长的各个阶段进行划分,总结、提炼形成描述性文本数据的知识库。将图谱和视频资源构成多媒体数据库。在搜索引擎中,对于图谱和视频资源可以将图片和视频中的文字提取出来,然后按文字来索引图谱和视频。

1.2 基于关键词的索引的建立

为便于搜索,在知识库的组织形式上,将平台中所有的数据资源分类编号形成索引。索引算法的好坏直接影响平台的响应速度和农户查询结果的质量。本平台采用的是以关键词为单位进行索引的建立,有效提高查全率和查准率。Lucene.net采用倒排索引,记录关键词的所属文档和在文档中的位置及频率。创建关键词索引时,按关键词顺序从小到大写入字倒排文件中,然后按词顺序将相应的索引信息顺序写入索引倒排文件中。

关键词的提取主要从以下几个方面判断:利用TF[1]*IDF[2],统计词频和词在所有文档中出现的总次数;标题中出现的词比内容中的词更重要;利用位置信息;把出现的名词按语义聚类,提取出有概括性的词作为关键词。

1.3 中文分词算法的选择

本平台中利用Lucene.net提供的中文分词接口实现农作物技术服务平台特有的中文分词模块,实现对农作物品种名、病虫草害名、症状、使用的农药多个关键词的组合来完成非精确推理。

目前常用的中文分词算法有基于字符串匹配的分词法、基于统计的分词法、基于理解的分词法和基于语义的分词法。本平台采用的是基于字符串匹配的分词法,又叫机械分词法,按照一定的策略将待匹配串与一个特定词库进行匹配,若在词库中找到某个字符串,则匹配成功(识别)一个词。根据分词库、匹配原则和扫描顺序的不同,又可分为:最大正向匹配分词法、最大逆向匹配分词法、双向匹配分词法、全切分算法等。

本平台采用Lucene中提供的位置匹配算法“检索词首字直接匹配算法”。首先使用“折半查找”在字表中找字,再在字表中检索以该字为首字的词,采用正向减字最大匹配算法,快速查找该词,得到其在数据库中的标记号和位置值,从而在索引文件中找到该词,定位到具体记录,找到目标结果。

1.4 检索结果排序的改进

Lucene在Index Searcher中提供了一个explain方法,返回检索结果每一条文档的详细评分内容。通过调整或者修改排序算法、增减不同文档的权值,可以达到我们期望的排序结果。

评分公式如下:

Score(q,d)=coord(q,d)*query Norm(q)*∑(tf(t in d)* idf(t)*get Boost(t.field in d)*length Norm(t.field in d)

其中文档频率tf(t in d)是每个(t:term)在结果文档(d)中出现的次数,idf(t)是检索匹配文档数量的反向函数,Boost因子是索引项的权重,length Norm长度因子是某个索引词在域中的总长度决定的。query Norm是调节因子,让排序结果在不同查询条件之间可以比较。Coord函数是一个协调因子,表示文档(d)中term(t)出现的百分比。

在农作物技术检索的实际应用中,可以通过实现Lucene中的Sort Comparator Source接口和Score Doc Comparator接口来完成自定义排序的功能。

2 农作物生产技术全文搜索引擎的实现

本文通过扩展Lucene.Net的分词接口,采用基于字符串匹配的中文分词算法来实现农作物生产技术服务平台的中文分词模块。

2.1 创建索引

创建一个提供全文检索功能的索引库,使用FSDirectory类指定索引库文件存放的位置。首先,使用Index Writer类来写索引文件,其中参数Analyzer是对文档进行词法分析和语言处理的。这里使用的是Pangu Analyzer。

其次,创建一个Document用来表示要索引的文档。

然后,将不同的Filed通过Add(Field field)添加到文档中。

最后,使用Index Writer对象调用add Document将索引写到索引文件中。

2.2 实现搜索

农作物技术服务平台需实现对农作物品种名、病虫草害名、症状等多个关键词的组合查询。在搜索生产技术的过程中,农户经常会使用一些当地的俗语。通过同义词搜索来实现语义扩展搜索。实现的方法是通过查询扩展方式来实现。比如当农户输入“番茄”搜索的同时,通过查找同义词库,按照“西红柿”、“番茄”、“洋柿子”等多个同义词查找。当农户输入“除草剂”的同时,也能按照“乙草胺”、“甲草胺”等进行下位词的扩展。

实现语义搜索的基本步骤如下:

1)准备农作物生产技术相关的语义词库,使用同义词词林的格式;

2) 把语义词库按s(synset_id,w_num,'word',ss_type,sense_number,tag_count)转换成wn_s.pl格式,再转换成Lucene同义词索引库;

3)通过Synonym Analyzer调用这个同义词索引库来实现同义词扩展查找。

使用Index Searcher类实现搜索功能。其方法Search包括(查询条件Query,过滤条件Filter,检索过后存放容器Collector)。Phrase Query用于多个关键词的拼接类,且关键词间是and(且)的关系。Boolean Query实现关键词间的or(或)关系。

2.3 自定义搜索结果

通过实现Sort Comparator Source接口来完成农作物生产技术搜索结果的自定义排序功能。我们定义搜索结果先按匹配相似度排序,再按时间排序。

Lucene.Net.Search.Sort Field[] sort F =

new Sort Field[]{Lucene.Net.Search.Sort Field.FIELD_SCORE,

new Lucene.Net.Search.Sort Field("postdate",

Lucene.Net.Search.Sort Field.STRING,true)};

Lucene.Net.Search.Sort score Sort=new

Lucene.Net.Search.Sort(sort F);

hits = searcher.Search(query, score Sort);

3 总结

本文针对农作物生产技术服务平台全文搜索的需要,基于对Lucene.Net的全文检索关键技术的研究,在此基础之上对其分词、索引建立、检索结果排序和检索效率进行了改进和优化。在数据访问层之上,设计实现了一个提供多种检索方式的农作物生产技术服务平台全文检索引擎的框架,为农户检索农作物技术提供了极大的便利。

参考文献

[1]李光敏.文献搜索引擎中特征项及权重的应用[J].计算机系统应用,2014,23(5):188-191.

[2]吴青,夏红霞,赵广辉,刘春燕.基于Lucene全文检索引擎的应用与改进.武汉理工大学学报,2008,30(7):145-148.

[3]何国斌,赵晶璐.基于最大匹配的中文分词概率算法研究[J].计算机工程,2010,36(5):173-175.

Lucene技术 篇4

在Lucence中包括了几个基础的概念,分别是索引、段、文档、域和项。其中索引由段构成,段由文档构成,因此索引可以理解为包含了多个文档的序列。文档由域构成,域由项构成,项是索引中最小构成单位,其本质是一个字符串。段是索引数据存储的基本单元,多个段之间彼此独立,当添加新的文档时将生成新的段,且段可以合并。

充分理解Lucence索引的内部结构,对于在当前互联网大数据、云存储应用环境下较好使用Lucence进行具有重要意义。

2 索引文件结构(Index file structure)

2.1 倒排索引

对文本信息进行检查的系统索引可以分为包括正排索引和倒排索引[1]。在实际使用中根据属性值查找记录的过程称为倒排索引。倒排表中存储了文档中包含的单词,文档编号差值、单词出现次数等,这些信息即组成了倒排索引项term。

倒排索引入口为索引项term,通过倒排索引可以找到包含每个term的文档集合称为记录表,记录表中包含文档号及term在该文档中的出现频率。

Lucene为了使得基于term的检索效率更高,索引存储terms的统计数据。Lucene的索引采用了倒排索引。它可以列举,包含一个term的所有文档。这与自然关联规则相反,即由documents列举它所包含的terms。

2.2 域Fields

Lucene在存储域数据时,域中文本被逐字的以非倒转方式进行转换,这些被倒排存储的域数据可以被索引[2]。每个域的文本被拆分为多个索引项以便被高效索引,另一种方式为域中文本作为一个索引项进行索引。

2.3 片断

Lucene索引可以由多个复合的子索引或片段构成。每个段是一个完全独立的索引,它可以分离提取进行检索。检索过程如下:(1)当添加新的文档时创建新的段;(2)对现有段进行合并。在索引检索时,会涉及多个索引或段,因此每一个索引都隐含包括了一组段。段及文档关系如图1所示。

2.4 文档编号

在Lucene的内部对于每个文档使用一个整数编号进行标识。初始情况下,第一个被加进来的文档其文档编号为0,之后加进来的文档其编号自动递增,采用自动递增方式对文档进行编号,编号不会出现重复。但需注意的是,文档编号可以被手动更改。因此在维护时若出现更改情况,需特别考虑此编号是否在更大的范围内被使用。通常的做法是为每个段空间设置文档编号的范围,以保证段之间的文档编号不重复。

综上所述,文档编号若发生修改可能导致错误,因此文档编号应先进行设计,在应用时不轻易、不频繁修改文档编号,只有当出现文档在某段空间是统一的,且需要在整个系统中使用时必须修改情况下才进行修改。

3 索引文件(Index file)

3.1 索引文件

Lucene索引文件包含多种,其使用不同的文件扩展名来进行标识。同时文件名称可以标识不同的版本。常见的文件扩展名有:fnm文件存储域名和域属性、fdt文件存储域数据、fdx文件存储在fdt文件中的偏移位置、frq存储文件中项的位置数据等。对于段文件命名通常为segments_x,其中x即为最新修改版本,文件segments.gen存储当前版本值。以下文件存在于每个索引index中,并且只有一份。

(1)Segments文件

索引中活动的Segments被存储在segment info文件中,segments_N,在索引中可能会包含一个或多个segments_N文件。然而,最大一代的那个文件是活动的片断文件(这时更旧的segments_N文件依然存在是因为它们暂时还不能被删除,或者,一个writer正在处理提交请求,或者一个用户定义的Index Deletion Policy正被使用。这个文件按照名称列举每一个片断,详细描述分离的标准和要删除的文件,并且还包含了每一个片断的大小。

(2)Lock文件

写锁文件名为“write.lock”,存储在默认的索引目录中。如果锁目录和索引目录不一致的,写锁将被命名为“XXXX-write.lock”,其中“XXXX”是一个特殊唯一的前缀,来源于索引目录的路径。

(3)Deletable文件

Lucene的删除机制类似于操作系统回收站,在执行删除操作时,相当于对索引进行了“删除标记”并未真实删除,当索引下次优化或合并时再从索引中真正删除。

(4)Compound文件

Compound文件格式成一个简单的容器,其用来服务所有Segment包含的文件(除了.del文件)。

3.2 Segment

每个段中的文件是由后缀名来区分的。

(1)域集合信息

域的信息以集合形式存储,域集合文件后缀为.fnm。在当前的情况下,fieldbits仅用于低位,索引的域值是1,未索引的域值为0,文件中各域根据次序进行编号,即认为值0是第一个域文件,值1是下一个域文件等。Fields将使用它们在这个文件中的顺序来编号。需要注意的是,就像文档编号一样,field编号与片断是相关的。

(2)域索引和域值

域值存储 表使用两 种文件存 储 , 分别为 : 域索引表 ( . f d x文件 ) 文件 , 这个文件 包含指向 域值的指 针Fieldvalues Position,类型为UInt64类型,此指针指向了某域值在域文件中的位置。因为域值文件包括定长的数据信息,较易随机访问;域值(.fdt文件)文件,每个文档的域值信息包括了字段Field Data、Doc Field Data、Field Count、Field Num、Bits和value。

(3)项字典

项Term字典使用如下两种文件存储,第一种是存储term信息(Term Info File)的文件,即.tis文件,另一种是存储term信息索引的文件,即.tii文件。Term Info File文件按照Term来排序,排序方法首先按照Term的field名称(按照UTF-16字符编码)排序,然后按照Term的Text字符串(UTF-16编码)排序。项的命名上前缀通常上是相同的,然后以字的后缀组成。

(4)项频率数据

Term频率数据文件(.frq文件)存储容纳了每一个term的文档列表,以及该term出现在该文档中的频率(出现次数frequency,如果omit Tf设置为fals时才存储)。

关于skiplevels , 每一个term可以有多 个skiplevels。一个term的s kiplevels的数目等 于Num Skip Levels=Min(Max Skip Levels,floor(log(Doc Freq/log(Skip Interval))))。对一个skip level来说Skip Data记录的数目等于Doc Freq/(Skip Interval^(Level+1))。然而最低的skip level等于Level=0。例如假设Skip Interval=4,Max Skip Levels=2,Doc Freq=35,则skip level 0有8个Skip Data记录,在Term Freqs序列中包含第3、7、11、15、19、23、27和31个文档的编号。Skip level 1则有两个Skip Data记录,在Term Freqs中包含了第15和第31个文档的编号。在所有level>0之上的Skip Data记录中包含一个Skip Child Level Pointer,指向(referencing)level-1中相应)的Skip Data记录。在这个例子中,level 1中的记录15有一个指针指向level 0中的记录15,level 1中的记录31有一个指针指向level 0中的记录31。

(5)项位置

Positions位置信息数据文件(.prx文件)容纳了每一个term出现在所有文档中的位置的列表,可以利用这些信息来参与对索引结果的排序。如果在fields中的omit Tf设置为true时将不会在此文件中存储任何信息,并且如果索引中所有fields中的omit Tf都设置为true,此.prx文件将不会存在。

(6)标准化因子文件

在Lucene 2.1版本之前,每一个索引都有一个norm文件给每一个文档都保存了一个字节。对每一个文档来说,那些.f[0-9]包含了一个字节容纳一个被编码的分数,值为对hits结果集来说在那个field中被相乘得出的分数。每一个分离的norm文件在适当的时候为复合的和非复合的segment片断创建。在Lucene 2.1及以上版本,只有一个norm文件容纳了所有norms数据:一个分离的norm文件在一个存在的segment的norm数据被更改的时候被创建,当field N被修改时,一个分离的norm文件.s N被创建,用来维护该field的norm数据。

(7)项向量文件

Term向量的支持是field基本组成中对一个field来说的可选项,它包含如下三种文件:a.文档索引或.tvx文件:对每个文档来说,它把偏移存储进文档数据(.tvd)文件和域field数据(.tvf)文件。b.文档或.tvd文件:对每个文档来说,它包含fields的数目,有term向量的fields的列表,还有指向term向量域文件(.tvf)中的域信息的指针列表。该文件用于映射出那些存储了term向量的fields,以及这些field信息在.tvf文件中的位置。c.域field或.tvf文件:对每个存储了term向量的field来说,该文件包含了一个term的列表,及它们的频率,还有可选的位置和偏移信息。

(8)删除的文档

删除的文档(.del)文件是可选的,而且仅当一个segment存在有被删除的文档时才存在。即使对每一单个segment,它也是维护复合segment的外部数据。

4 索引创建过程(The index creation process)

为了使用Lucene的索引数据,必须先将其转换为文本标记的数据流,并用它来创建一个文档对象,其中包含的域成员来容纳这些文本数据[3,4]。一旦你准备的文档对象,可以调用Index Writer类的adddocument方法传递对象到Lucene写索引。当这样做时Lucene进行分析数据,以便更适合索引。

文档的索引过程是通过Documents Writer的内部数据处理链完成的,Documents Writer可以实现同时添加多个文档并将它们写入一个临时的segment中,完成后再由Index Writer和Segment Merger合并到统一的segment中去。Documents Writer支持多线程处理,即多个线程同时添加文档,它会为每个请求分配一个Documents Writer Thread State对象来监控此处理过程。处理时通过Documents Writer初始化时建立的Doc Field Processor管理的索引处理链来完成的,依次处理为Doc Field Consumers、Doc Inverter、Terms Hash、Freq Prox Terms Writer、Term Vectors Terms Writer、Norms Writer以及Stored Fields Writer等。

Doc Field Processor Per Thread.process Document()方法是处理一个文档的调度函数,负责整理文档的各个fields数据,并创建相应的Doc Field Processor Per Field对象来依次处理每一个field。该方法首先调用索引链表的start Document()来初始化各项数据,然后依次遍历每一个fields,将它们建立一个以field名字计算的hash值为key的hash表,值为Doc Field Processor Per Field类型。如果hash表中已存在该field,则更新该Field Info(调用Field Info.update()方法),如果不存在则创建一个新的Doc Field Processor Per Field来加入hash表中。该hash表会存储包括当前添加文档的所有文档的fields信息,并根据Field Info.update()来合并相同field名字的域设置信息。

建立hash表的同时,生成针对该文档的fields[]数组(只包含该文档的fields,但会共用相同的fields数组,通过last Gen来控制当前文档),如果field名字相同,则将Field添加到Doc Field Processor Per Field中的fields数组中。建立完fields后再将此fields数组按field名字排序,使得写入的vectors等数据也按此顺序排序。之后开始正式的文档处理,通过遍历fields数组依次调用Doc Field Processor Per Field的process Fields()方法进行,完成后调用finish Document()完成后序工作,如写入Field Infos等。

5 结论(Conclusion)

Lucene技术 篇5

自从有了计算机以后, 人类开始用计算机保存信息, 有保存就需要查找, 于是出现了检索技术。文本检索技术的发展从最初的SMART文档检索系统到AltaVista搜索引擎, 到现在的搜索巨头Google, 人们习惯在互联网上搜索需要的信息。同时在同一个网站内往往拥有大量的资源, 怎样在网站内部使用户能够迅速的找到所需信息, 已成为一个网站能够吸引用户的重要方面, 建立站内搜索引擎成为必要。使用Lucene实现站内搜索比较与传统的使用数据库查询, 使用Google提供的站内搜索存在优势。

2. 国内外现状分析

在如今的网站建设中, 建立站内的全文检索有重要的意义。使用Lucene而不用直接从数据库里搜索记录, 主要是基于以下原因:

(1) 性能问题, Lucene是基于文件索引的搜索机制, 性能要比数据库里检索更快, 特别是数据量大的时候两者区别比较明显。

(2) 目前很多网站, 都已经将页面静态化, 这种情况下, 直接用生成的文件编制索引, 再利用Lucene来检索, 可以不用查询数据库, 减轻了数据库的压力。

(3) Lucene可以更方便的进行分词, 支持多个关键字检查等操作, 在实现上要比数据库查询方便。

虽然大型搜索引擎的功能已经越来越强大了, 国内外很多站点都使用了Google的站内检索代替了自己的站内数据库全文检索。但依靠Google这样的大型搜索引擎做站内检索会有以下弊端:

(1) 数量有限:搜索引擎并不会深度遍历一个网站而将网站所有的内容都索引进去, 例如Google更容易索引静态网页且是最新更新的。基于Lucene的站内搜索, 可以索引所有需要的内容。

(2) 更新慢:搜索引擎针对站点的更新频率也是有一定周期的, 很多内容需要一定时间后才能进入GOOGLE的索引。基于Lucene的站内搜索, 可以及时更新和删除索引。

(3) 内容不精确:搜索引擎需要通过页面内容提取技术将导航条, 页头页尾等内容过滤掉, 这种摘要和排重机制是很难实现的。基于Lucene的站内搜索, 因为对网站内容添加维护的同时进行索引添加, 维护可以保证内容的精确程度。

(4) 无法控制输出:当有更多的输出需求, 例如按时间排序, 按点击量, 按类目过滤等, 则不够灵活。基于Lucene的站内搜索, 使用Lucene的API可以按照实际需要对结果进行分析, 排序。

3. Lucene框架

Apache Lucene是一个基于Java全文搜索引擎, 提供一组解读, 过滤, 分析文件, 编排和使用索引的API。使用Lucene建立站内搜索可以方便用户查找信息, 并且基于Lucene的全文检索便于索引添加, 维护, 搜索, 并能对搜索结果进行分析, 排序。图1列出了Lucene的系统结构与源码组织图。

从图1中看到, Lucene的系统由基础结构封装、索引核心、对外接口三大部分组成。其中直接操作索引文件的索引核心又是系统的重点。Lucene将所有源码分为了7个模块, 并分别放在七个包中, 分别是:analysis, document, index, queryParser, search, store, util。以下分四个部分对Lucene框架的使用进行阐述。

(1) 建立索引

Lucene提供了非常简单的建立索引的方法, 只要能将要索引的文件转化为文本格式, Lucene就能为这些文档建立索引, 建立索引的过程分为以下三个步骤。

第一步:将不同的数据源组织成一个Document类型的对象。

第二步:对要建立索引的数据对象进行分析。

第三步:按照Lucene的索引格式将数据写入索引文件。

Lucene提供了五个基础的类来实现这些步骤, 分别是Document, Field, IndexWriter, Analyzer, Directory。

(2) 搜索

建立好索引后, 就可以根据索引进行搜索。利用Lucene进行搜索, 搜索引擎首先会对搜索的关键词进行解析, 然后再在建立好的索引上面进行查找, 最终返回和用户输入的关键词相关联的文档。搜索的过程可以通过三个步骤来实现。

第一步:初始化检索工具IndexSearcher, 设置索引存放的路径。

第二步:构建一个Query对象, 对查询关键字进行分析。

第三步:搜索并处理返回的结果。

Lucene提供了五个基础的类来完成这个过程, 它们分别是Query, Term, TermQuery, IndexSearcher, Hits。

(3) 结果排序与文档评分机制

对于检索到的结果, 需要按一定的顺序返回给用户。因此, 需要引入一种机制来对检索结果进行排序, 以便更加合理地将结果返回给用户。评分机制就是对检索结果按某种标准进行评估, 然后按分值的高低来对结果进行排序。Lucene根据内置算法对文档进行评分, 另外Lucene在公式中还加入了加权因子, 它可以实现有效地对某个查询或某一域给评分带来的影响施加控制, 从而改变某一文档的评分, 并最终改变在结果中的排序。

(4) 分词

对于一个工作良好的搜索引擎来说, 分词是必不可少的一个核心模块, 只有通过分词才可能让信息检索系统理解用户的检索请求, 进而为其搜索相关的内容。此外, 分词的质量将直接决定搜索引擎的搜索精度, 分词的速度也将影响搜索的速度。Lucene提供了分词器, 称为Tokenizer, 和过滤器, 被称为TokenFilter。但是这些分词器和过滤器都只适用于使用英文26个字母组成的语言。对于中文分词, 可以利用Lucene的扩展性, 将第三方分词工具集成到Lucene中实现中文分词。

4. 结束语

随着网站内容的越来越丰富, 信息量也越来越大的情况下, 访问者想要得到他们的信息, 站内搜索的作用就会明显起来。Lucene开源框架提供了全文检索功能, 利用中文分词的第三方分词工具, 可以很好的实现站内搜索, 方便用户使用, 体现网站专业性, 提高网站竞争力。

参考文献

[1]李晓明, 闫宏飞, 王继民.搜索引擎——原理、技术与系统[M].北京:科学出版社, 2004.

[2]车东.Lucene:基于Java的全文检索引擎简介[OL].[2008-11-24].http://www.chedong.com/tech/lucene.html.

Lucene技术 篇6

21世纪是网络信息化的时代, 网络信息已经成为人们工作与学习中不可或缺的东西。网络在世界范围内向用户提供信息服务及其所拥有的信息资源, 但随着网络的蓬勃发展, 信息数量的快速增长, 当今网络上的这些海量信息形态各异, 且分散在网络中的各个角落。因此, 如何从网络上的海量信息中检索出用户所需要的信息, 成为了我们关注的一个重要问题。目前, 虽然有了像Google、百度这样的通用搜索引擎, 但是它们并不能适合人们所有的情况和需要, 也没有哪个最大最好的搜索引擎可以覆盖所有的搜索范围, 因为不同的人群范围所需求的信息资源也是不尽相同的。人们习惯在互联网上查找信息, 往往在同一个网站内拥有丰富的信息资源, 如何在网站内部快速查找用户所要的信息, 也成为了人们当前关注的一个焦点。

二、搜索引擎

搜索引擎是一个为用户提供信息检索功能的网络工具。搜索引擎是随着互联网络信息的快速增长, 开始逐步发展起来的技术。在互联网发展的最初阶段, 网站的数量相对较少, 信息查找比较容易。但随着互联网技术爆炸性的发展, 网络上面的信息越来越多, 并且以各种各样的形态存在, 这时用户便很难找到所需要的信息, 一些为满足大众信息检索需求的专业搜索网站就应运而出了。如今, Google的巨大成功让整个世界都把眼光投入到搜索引擎这个领域中, 并且Google在一定程度上起到了引导作用。Google公司在2007年决定向小型网站提供专门的搜索服务。这些都表明小型专用的搜索引擎将在人们获取互联网信息中发挥着想当重要的作用。

三、l ucene

Lucene是Apache软件基金会Jakarta项目组的子项目, 它是一个开放源码的全文检索工具。Lucene在起初是基于Java开发的, 在网站建设中扮演的是一个全文索引工具的角色。与传统的直接从数据库中搜索记录相比较, 使用Lucene可以大大增加搜索引擎的性能。Lucene的搜索机制是基于文件索引的, 所以性能要比从数据库中检索更快, 尤其当数据量大的时候区别更加明显。Lucene可以及时索引所有需要的内容, 并更新和删除它们。

Lucene的系统结构具有良好的二次开发性能。首先它的索引格式与平台无关, 其次它将各个组成部分封装成抽象类, 具体的实现定义为抽象类的实现过程, 并且具有强烈的面向对象的特征。 (图1)

四、校园网的搜索引擎框架

现代网络信息化水平迅速提高, 校园网作为一个信息核心领域, 所涉及到的内容也是形态各异的。本文就如何搭建一个校园网内的搜索引擎, 以方便在校师生快速准确地查找各自所需信息的整体流程, 给出详细的介绍。搜索引擎首先根据网站的需求选择合适的网络爬虫, 对网络上的信息进行爬取, 爬取到信息之后, 对其中的有用信息进行提取, 并利用Lucene对所提取到的有用信息进行索引, 最终输出与用户查询结果匹配度最大的信息。

本文研究的校园网搜索引擎有三个功能模块:信息采集模块、信息处理模块和信息检索模块。信息采集模块, 顾名思义, 就是对网络上的信息进行采集, 这是整个搜索引擎系统一项最初始的准备工作, 也是最基础的工作。该搜索系统针对的目标群体主要是在校师生, 也就是说, 要捕获的信息主要来源于校园网络。信息处理模块, 主要负责对采集到的信息进行提取, 提取到所需的有价值的信息之后并为其建立索引, 为后续的信息检索模块构建好索引数据库。信息检索模块主要负责在已构建好的索引数据库中查找包含用户查询关键字在内的文本内容, 并负责用户从搜索界面接收关键字以及查询结果信息的返回工作。校园网的搜索引擎系统组织结构图如图2所示。 (图2)

(一) 信息采集模块。

信息采集模块是校园网搜索系统最基础的组成部分, 它的作用是对指定网站的页面信息进行采集, 并将采集到的信息保存到数据库中。这一部分主要依靠网络爬虫程序来实现。网络爬虫是一个自动获取网页内容的程序, 它为搜索引擎从Internet网上下载网页, 是搜索引擎的重要组成部分。它从一个或一组初始网页的URL开始, 获取初始网页上的URL, 在抓取网页的过程中, 不断从当前页面上抽取新的URL放入队列, 直到满足系统的一定停止条件。本文利用网络爬虫从校园网上抓取网页URL、网页标题和网页文本内容, 并保存到已构建好的本地页面数据库中。信息处理模块从页面数据库中读取页面信息, 分析信息内容并为其建立索引。

一个好的网页爬虫应该具有很好的灵活性和健壮性, 并且易于管理员操作管理。灵活性旨在爬虫能够尽可能多的适用于各种不同的场合。健壮性则要求爬虫在面对各种奇怪的规则或者链接时具有很好的处理策略, 以保证系统能够正常运作。人性化管理界面是爬虫网络是否受欢迎的一个重要评判标准, 越简单清晰越高效的管理系统会更加受到人们的欢迎。

(二) 信息处理模块。

Lucene开源检索框架是基于文件索引机制的, 只能对文本文件进行索引。信息处理模块主要包含3个步骤:读取页面内容、页面内容解析和构建索引。结构图如3所示。 (图3)

1、读取页面内容。

首先, 该模块从已构建好的页面数据库中提取网页标题和网页文本内容;然后将提取到的信息传递给下一步骤处理。

2、页面内容解析。

读取到从页面数据库传送过来的文本内容之后, 就要对其进行解析处理了。解析就是对文本内容进行解释和分析。分析在Lucene中是指将文本转换为最基本的索引项的一个过程。所谓的分析器就是对分析操作的封装类。对于不同的语言, 分析器所要完成的功能是不一样的。比如, 对英语来说, 要将文档字母从大写转换成小写、过滤忽略词等。校园网搜索引擎面对的语言主要是中文, 分析器需要实现的就是对完整的语句进行分词。分词, 顾名思义, 就是将一段文本拆分成多个词。在建立索引的时候, 写入索引库中并能够被用户检索的是一个个的词条。所谓词条就是通过分析器进行分词和相关处理后的文本单元项, 只有通过分词才可能让搜索系统理解用户的检索请求, 进而为其搜索相关的内容。

对于一个工作性能良好的搜索引擎来说, 分词是必不可少的一个核心模块。分词的质量将直接决定搜索引擎的搜索精度, 分词的速度也将影响搜索的速度。所以, 选择一个合适的分词器对整个系统的性能是至关重要的。JE分词, 这是Lucene中自带的工具之一, 可以很好地完成系统的分词工作。JE分词的下载地址为http://www.jesoft.cn/, 这是一套由java写成的分析软件。

3、构建索引。

事实上, 常用的索引方式有3种, 分别是倒排索引、后缀数组索引和签名文档索引。

Lucene采用的是倒排索引结构。倒排索引非常符合人们的思维习惯, 同时它对关键字检索特别有效。倒排是一种面向单词项的索引机制。通常, 由词项 (关键字) 和出现情况两部分组成。对于索引中的每个词项 (关键字) , 都跟随一个列表 (位置表) , 用来跟踪记录单词在所有文档中出现过的位置。

Lucene中涉及两个非常重要的概念, 分别是Document和Field。Document, 解释为文档, 在Lucene中, 它代表一种逻辑文件。Lucene本身无法对物理文件建立索引, 而只能识别并处理Document类型的文件。Document作为一种数据源的集合, Lucene会从其中取出相关的数据源内容, 并根据属性配置进行相应的处理。Field, 我们可以理解为字段, 在Lucene中, 是用Field来表示一个一个的Document数据源的。在用户构建完Document、并为其添加如合适的Field后, 便可以按照Lucene的索引格式将数据写入索引文件, 构成索引文件库。

(三) 用户检索模块。

在建立好索引库之后, 用户就可以根据索引进行检索了。在Lucene中, 搜索引擎在接收到用户检索关键字后, 首先会对关键字进行分析, 然后在已建立好的索引库中进行搜索, 搜索完毕后, 将与关键字最相关的内容返回给用户。搜索的具体步骤如下:

第一步:初始化检索工具IndexSearcher, 设置索引存放路径。

IndexSearcher searcher=new IndexSearcher (INDEX_STORE_PATH) ;

第二步:构建一个Query对象。

Term t=new Term (”a”, ”b”) ;

Query q=new Query (t) ;

其总a是Document文档, b是用户要检索的关键字。

第三步:检索并返回查询结果。

执行完这三个步骤, 用户将会得到所输入关键字的相关结果。

五、结束语

本文对校园网的搜索引擎框架做了一个整体的介绍。现代网络信息以多样化的形式快速增长, 互联网用户想要得到自己所需要的信息, 搜索引擎起着至关重要的作用。当代社会分工不同, 人们所关注的信息产业范围也不尽相同, 所需要的信息也越发的呈现出模块化, 分属于不同的站。站内搜索将越来越受到人们的关注, 具有很好的研究价值和前景。

摘要:现代网络信息化水平日益提高, 网页信息量急剧增加, 搜索引擎已经成为人们获取所需知识的必要工具之一。本文结合校园网搜索引擎的具体需求, 介绍校园网搜索引擎的整体框架。其中, l ucene作为开源的检索框架, 具有很好的应用性。

关键词:搜索引擎,lucene,网络爬虫,站内搜索

参考文献

[1]车东.Lucene:基于Java的全文检索引擎简介[OL].[2008-11-24].http://www.chedong.com/tech/lucene.html.

[2]薛宇星.基于Heritrix和Lucene的Web站内搜索系统[D].西安:西安电子科技大学, 2008.

[3]Lucene中国[EB/OL].http://www.lucene.com.cn, 2010.5.27.

[4]冯斌.基于Lucene小型搜索引擎的研究与发现[D].武汉:武汉理工大学, 2008.

[5]胡俊, 李星.校园网信息资源搜索引擎的研究与实现[J].计算机工程与设计, 2006.7.

[6]张贤, 周娅.基于Lucene网页排序算法的改进.广西:计算机应用, 2009.

Lucene技术 篇7

一、Lucene应用配置

Lucene包可以在Apache官方网站下载。下载lucene-x.x.x.zip (x.x.x为版本号, 下同, 笔者使用的是4.3.0版本) , 解压缩后, 将analysiscommon目录中的lucene-analyzers-common-x.x.x.jar, core目录中的lucene-core-x.x.x.jar, highlighter目录中的lucenehighlighter-x.x.x.jar, queryparser目录中的lucenequeryparser-x.x.x.jar等4个库文件拷贝到应用程序的Web-INFlib目录下。

二、创建索引文件

具体实现代码如下 (代码功能已在注释中说明) :

三、全文检索实现

具体实现代码如下 (代码功能已在注释中说明) :

上一篇:学生培养下一篇:班主任工作的五点体会