开源搜索引擎技术Lucene探索与开发---毕业论文_第1页
开源搜索引擎技术Lucene探索与开发---毕业论文_第2页
开源搜索引擎技术Lucene探索与开发---毕业论文_第3页
开源搜索引擎技术Lucene探索与开发---毕业论文_第4页
开源搜索引擎技术Lucene探索与开发---毕业论文_第5页
免费预览已结束,剩余42页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

本本 科科 毕毕 业业 论论 文文 开源搜索引擎技术开源搜索引擎技术 LuceneLucene 探索与开发探索与开发 The Exploration and development of open source search engine technology of Lucene 姓 名: 学 号: 学 院:软件学院 系:软件工程 专 业:软件工程 年 级: 指导教师: 年年 月月 I 摘摘 要要 在互联网蓬勃发展的今天,互联网上的信息更是浩如烟海。人们在享受互 联网带来的便利的同时,却面临着一个如何在如此海量的内容中准确、快捷地 找到自己所需要的信息的问题,由此互联网搜索引擎应运而生。 本文旨在探索研究网络流行的开源搜索引擎 Lucene 的技术内涵,并基于此 使我们丢弃对于搜索引擎技术相对肤浅、苍白的理解,并建立起有关于搜索引 擎的全新的、正确的认识。 本文首先详细介绍了基于英特网的搜索引擎的系统结构。然后从应用的角 度出发,较为详尽地介绍了 Lucene 的技术精髓及搜索引擎组建关键步骤,并以 一个小型的搜索引擎项目为例,由浅入深地为我们推开了探索与发现 Lucene 搜 索引擎技术的大门。 在本项目中,我选取了 Lucene 全文检索的 Internet 网页内容检索和本机 Word 文档以及 pdf 文档内容检索的两个具有代表性的应用场景,并介绍且实现 了某些高级搜索的应用。 同时,本文还挑选了 Heritrix 网络机器人、IKAnalyzer 中文分词等与搜索 引擎密切相关的技术进行了详细的说明,使我们对于搜索引擎拥有了全方位的 了解 关键词:关键词:搜索引擎;Lucene;索引;网络蜘蛛;中文分词 II Abstract The contents on the Web are increasing exponentially as the rapid development of the Internet. A problem how to obtain the useful information from vast contents quickly and accurately is facing us while people are enjoying the convenience of the Internet. The solver of this problem is Web Search Engine. This paper is intended to explorer and research the inner technique of Open Source Search Engine - Lucene, which is popular on the Internet, and then, let us abandon the weakness and pale knowledge of Web Search Engine, and tell us what should be true. In here, it will introduce the main system framework of Search Engine based on Internet at first . And then, we will detailedly explain the working process in kernel of Lucene and the important steps of how to build a successful Web Search Engine with a applied angle of view. It open the door of explorering and researching Lucene for us going from the easy to the difficult and complicated by using a small Search Engine project as a example., in addition. At the same time, thie paper help us illustrate the Hertrix Spider and IKAnalyzer which is working for dividing the Chinese sentence, such technology are close to the Web Search Engine. It let us have a broad overall view or perspective on Search Engine. Key words: Search Engine; Lucene; Index; Chinese parser. III 目目 录录 第一章第一章 概述概述1 1.1引言引言 1 1.2什么是搜索引擎及全文检索什么是搜索引擎及全文检索 1 1.3搜索引擎的结构搜索引擎的结构 2 1.4搜索引擎的三个基本原理搜索引擎的三个基本原理 3 1.5搜索引擎的主要指标及分析搜索引擎的主要指标及分析 4 1.6中文搜索引擎的发展趋势及现状中文搜索引擎的发展趋势及现状 4 第二章第二章 LUCENELUCENE 及项目相关技术分析及项目相关技术分析.6 2.12.1系统概述系统概述 6 2.22.2L LUCENEUCENE索引策略索引策略7 2.2.1索引建立过程分析 .7 2.2.2Lucene 索引结构.9 2.2.3Lucene 索引建立12 2.2.4索引优化 13 2.32.3搜索器实现及详解搜索器实现及详解 14 2.3.1查询封装 Query 类 15 2.3.2多个搜索器跨索引检索 15 2.42.4L LUCENEUCENE结果排序结果排序16 2.52.5L LUCENEUCENE 的过滤器的过滤器.16 2.62.6中文分词中文分词 17 2.6.1中文切词存在的问题及主要的分词方法 17 2.6.2IKAnalyzer 18 2.72.7网络蜘蛛网络蜘蛛(S(SPIDERPIDER) ) 19 2.7.1什么是网络蜘蛛 19 2.7.2Spider 工作原理19 2.7.3Heritrix 网络蜘蛛 .20 IV 第三章第三章功能分析与设计功能分析与设计23 3.13.1需求分析需求分析 23 3.23.2架构设计架构设计 24 第四章第四章搜索引擎的实现搜索引擎的实现26 4.1系统概要设计系统概要设计 26 4.2系统详细设计及实现系统详细设计及实现 27 4.2.1索引系统索引系统 27 4.2.2用户接口系统用户接口系统 31 4.3成果展示成果展示 33 第五章第五章 总总结结36 5.1论文总结论文总结 36 5.2工作总结与体会工作总结与体会 36 参考文献参考文献38 致谢致谢39 V Content Chapter 1 Preface.1 1.1 Introduction.1 1.2 What is search engine and global search1 1.3 The structure of search engine.2 1.4 Three principles of search engine3 1.5 The analysis and evaluation indexs of search engine 4 1.6 The now situation and the future tendency of chinese search engine4 Chapter 2 Lucene and interrelated technology analysis.6 2.1 System Introduction .6 2.2 Lucene index tactics7 2.2.1 The create procedure of index7 2.2.2 The structure of Lucenes index9 2.2.3 Create Lucene index 12 2.2.4 Index optimization.13 2.3 The explanatoriness and implement of searcher .14 2.3.1 The encapsulate class of Query .15 2.3.2 Multi-searcher15 2.4 The Sorting of searching result .16 2.5 Lucene filter 16 2.6 Chinese analyzer.17 2.6.1 The problems and resolvent of chinese analyzer.17 2.6.2 IKAnalyzer 18 2.7 Spider.19 2.7.1 What is spider19 2.7.2 The principle of Spider.19 VI 2.7.3 Heritrix.20 Chapter 3 Function analysis and design.23 3.1 System requirement analysis.23 3.2 Framework design24 Chapter 4 The achievement of Search Engine project26 4.1 System preliminary design.26 4.2 System detail design27 4.2.1 Indexer.27 4.2.2 User application interface31 4.3 Result revealing.33 Chapter 5 Summary.36 5.1 The paper summary .36 5.2 The work summary and experience36 References .38 Acknowledgements.39 第一章 概述 1 第一章第一章 概述概述 1.1引言引言 在互联网普及以前的很长一段时间里,信息的检索和管理仅仅只是意味着 图书、资料的目录分类。然而互联网和网站的横空降世并奇迹般地以有如闪电 的迅猛姿态强势介入了我们每一个人的生活。长久过着信息闭塞与滞延生活的 人们一眨眼就淹没在了高速信息时代的滚滚洪流之中。我们从没有想到会为了 查找信息而花费如此多的精力。然而,通用搜索引擎的出现迅速解决了这一难 题。 如果说出现仅仅四十年的互联网技术为我们这一时代带来的是一群令人震 惊与叹服的黑马,那么仅有十年左右历史的搜索引擎技术无疑是这群黑马中的 佼佼者。搜索引擎的出现整合了众多网站的信息,就犹如这信息汪洋中的一座 导航灯塔。信息的价值从没有像今天这样如此广泛地在人们的心中得到提升。 搜索引擎技术是互联网资源导航和访问的重要手段,然而,由于搜索引擎底层 开发技术复杂,加上各搜索引擎厂商对核心技术的保密,这无形中提升了搜索 引擎项目开发的门槛。然而开源搜索引擎项目 Lucence 的出现改变了这一状况。 让更多的网站自由地使用搜索技术,无疑会极大方便我们的网络生活,这对改 善互联网的信息秩序,加强网站建设也是大有裨益。 1.2什么是搜索引擎及全文检索什么是搜索引擎及全文检索 搜索引擎是 Internet 上的一个网站,它的主要任务是在 Internet 中主动搜 索其他 Web 站点中的信息并对其自动索引,其索引内容存储在可供查询的大 型数据库中。当用户利用关键字查询时,该网站会告诉用户包含该关键字信 息的所有网址,并提供通向该网站的链接这就是搜索引擎。 全文检索是指计算机索引程序通过扫描文章中的每一个词,对每一个词建 立一个索引,指明该词在文章中出现的次数和位置,当用户查询时,检索程序 开源搜索引擎技术探索与研发 2 就根据事先建立的索引进行查找,并将查找的结果反馈给用户的检索方式。这 个过程类似于通过字典中的检索字表查字的过程。 1.3搜索引擎的结构搜索引擎的结构 一个完整的互联网搜索引擎通常由 5 个环节构成,包括网页信息的抓取、 网页内容分析、网页索引的建立、网页检索结果排序、网页检索工具与用户接 口。其基本结构如图 1 所示 用 户 检 索 接 口 网页检索 结果排序 网页索引 的建立 网页内容 分析 网页 信息 抓取 索引库 互联网 图图 1-1: 搜索引擎工作流程框架搜索引擎工作流程框架 a)网页信息抓取 网页信息抓取的软件或系统被称为网络蜘蛛(spider) 。从特定的 URL 出发,按一定的搜索策略依照网页框架及目录结构进行互联网漫 游访问,不断探索发现新的超链接,并搜集多种类型文档。这一块我拟 采用开源蜘蛛 Heritrix(详细说明见下文)。 b)网页内容分析 对采集来的网页数据进行分析、文档格式转换及正文提取。进行结 构化操作之后一般还要进行数据挖掘、领域信息识别,以提高信息质量。 文档分析技术一般包括分词、过滤、转换等工作。 第一章 概述 3 Lucene 自带的分词器并不能对中文进行很好的支持,这一环节我拟 将采用网上流行的开源中文分词器 IKAnalyzer(见下文)进行处理。 c)网页索引建立3 良好的索引策略可以极大加快搜索的速度,并更精准地进行网页定 位。搜索引擎通常使用倒排表,也就是常说的倒排索引。如图 1.2。 索引项 1索引项 2 索引项 3索引项 4索引项 5 文件 1文件 1 文件 3 文件 2 文件 3 文件 1 文件 2 文件 1 文件 2 文件 3 图图 1-2: 倒排索引结构图倒排索引结构图 d)网页检索结果排序 用户输入检索信息之后,搜索引擎将根据产生的结果集进行相 关性和其他权值进行排序,同时排除重复链接等等,以保证用户得 到其目标信息。 e)网页检索工具与接口 用户接口用于为用户提供查询的入口以及信息反平台。 如百度等大型搜索引擎能为用户提供各种专业性的限定查询机制, 以及高效的搜索关键字提示等等。一个良好的用户检索接口应该充 分遵循人机交互的理论和方法。 1.4搜索引擎的三个基本原理搜索引擎的三个基本原理 1. 利用网络蜘蛛系统程序,自动访问互联网,并不断获取新的 URL,再 重复访问,下载的工作 2. 利用索引系统程序分析收集回来的各种文档,提取所需信息,经由特 定的算法分析过程,得到各网页与各关键词的相关度重要信息,并建 立庞大的索引系统 开源搜索引擎技术探索与研发 4 3. 搜索系统程序根据用户所输入的关键词找到符合相关性的所有已经索 引过的网页,并根据相关度的高低,降序排列展现在用户面前 1.5搜索引擎的主要指标及分析搜索引擎的主要指标及分析 搜索引擎的主要指标有响应时间、召回率、准确率、相关度等。这些指标 决定了搜索引擎的技术指标。搜索引擎的技术指标决定了搜索引擎的评价指标。 好的搜索引擎应该是具有较快的反应速度和高召回率、准确率的,当然这些都 需要搜索引擎技术指标来保障。 召回率召回率:一次搜索结果中符合用户要求的数目与用户查询相关信息的总数之比 准确率准确率:一次搜索结果中符合用户要求的数目与该次搜索结果总数之比 相关度相关度:用户查询与搜索结果之间相似度的一种度量 精确度精确度:对搜索结果的排序分级能力和对垃圾网页的抗干扰能力 响应速度:响应速度:搜索引擎响应用户检索请求到返回结果所需花的时间 网页更新速度:网页更新速度:是指搜索引擎收录的网页信息的更新频率 1.6中文搜索引擎的发展趋势及现状中文搜索引擎的发展趋势及现状 现今主流的中文搜索引擎有:百度、Google、Yahoo、搜狗、搜搜等等。 其中百度是世界上规模最大的中文搜索引擎,拥有全球最大的中文网页库,每 天处理来自一百多个国家的超过一亿人次的搜索请求。Google 则拥有资源丰富、 内容广泛、技术先进和功能齐全等优势。 目前,搜索引擎呈现蓬勃发展的势态,中文搜索引擎也越来越丰富多样化。 总的来说,中文搜索引擎有如下的发展趋势: (1)目录式分类结构下实现全文检索。将所有信息分门别类地归纳出来, 使用户可以很清晰、方便地查询。如百度新闻、百度图书等等。 (2)提供多媒体检索功能。随着网络多媒体信息不断增加,搜索引擎也 不断增加着对相应多媒体文件检索的支持。但仅限于文件名、大小 的检索。诸如对图像色彩、特征、纹理等的检索还有待完善。 (3)全方位的站点信息。增加了诸如天气、股市及新闻等等应用,逐步 第一章 概述 5 完善成一个全方位的信息平台。 (4)检索方式多样化,查询手段智能化。不仅支持布尔逻辑检索,还提 供范围检索、位置检索、匹配检索等等。并能相对智能地识别用户 的搜索目的给出相应的搜索提示等等。 开源搜索引擎技术探索与研发 6 第二章第二章 LuceneLucene 及项目相关技术分析及项目相关技术分析 Lucene 是 apache 软件基金会1 jakarta 项目组的一个子项目,是一个开放 源代码5的全文检索引擎工具包,即它不是一个完整的全文检索引擎,而是 一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,简单地说 Lucene 只是一组功能比较全面的 API。Lucene 的目的是为软件开发人员提供 一个简单易用的工具包,以方便的在目标系统中实现全文检索的功能,或者 是以此为基础建立起完整的全文检索引擎。 2.12.1系统概述系统概述 图图 2-l: Lucene 功能逻辑图功能逻辑图1 SEARCHER (查询) QUERY PARSER(查询分析器) SEARCHER(查询器) ACCESS INDEX (访问索引) DOCUMENT(文档结构) ANALYZER(语言分析器) INDEXER (入库) STORAGE(存储器) FSRAM 第二章 Lucene 及项目相关技术分析 7 2.22.2LuceneLucene 索引策略索引策略 .1 索引建立过程分析索引建立过程分析 假设有两篇文章 a 和 b 文章文章 a 的内容为的内容为:Tom lives in Guangzhou,I live in Guangzhou too. 文章文章 b 的内容为:的内容为:He once lived in Shanghai. 我们采用的是关键字搜索技术,故而首先我们应将文章内容分解(Parser) 成为逐个的关键字。处理过程大致为: 1)文中的 in、once、too 以及类似的 is、on 等单词没有实际意义,这些 词往往会在句中反复出现,这些词叫做停止词(stopword)。如果我们也保 留他们替他们进行索引处理,毫无疑问,我们将耗费大量的时间及储存空 间来进行这一无聊且毫无意义的工作。 英文停止词大致有:英文停止词大致有:a,an,and,are,as,at,be,but,by,for,if,in,into,is,it,no,not,of,on,or,such,that, the,their,then,there,these,they,this,to,was,will,with 中文停止词大致有:中文停止词大致有:也、了、仍、从、以、使、则、却、又、及、对、就、并、很、或、 把、是、的、着、给、而、被、让、在、还、比、等、当、与、于、但 2)其次是大小写问题。比如 He 与 he 并无甚差别,故而进行关键字处理 的时候,所有的单词要进行大小写统一。 3)再有就是名词的单复数与动词的各个时态。比如 lives、lived 都要还 原成 live 关键字。像 apples 要还原成 apple 等等。应为这一般都是用户所希 望的查询范围。 4)标点符号一般没有特殊意义,故而也可以过滤掉。 5)将缩写中的标志点去掉,比如:U.S.A 去除后成为 USA。 开源搜索引擎技术探索与研发 8 处理完以后,于是我们得到了如下关键字 文章文章 a:tomliveguangzhouiliveguangzhou 文章文章 b:heliveshanghai 然后我们对关键字建立倒排序索引。何谓倒排序索引呢?解释起来相当 简单。通常而言,我们翻书查找某段文章或信息时,应先找到该书,再 进行查阅。而倒排序的意思就是我们先根据这一文段或关键词组直接找 出所有与之相关的书本。也就是说原来的“文章号”“关键字”的对应关 系变成了“关键字”“文章号”的对应关系。 不言而喻,一个优秀的索引存储策略,是整个搜索引擎技术的核心。 Lucene 的索引树结构非常优秀,是 Lucene 的一大特色 文章 a 和 b 经过倒排之后变成了 关键字关键字 文章号文章号 guangzhou a he b i a live a,b shanghai b tom a 除了要知道该关键字出现在哪篇文章中之外,我们还会要求知道该关键字 出现在文章中的具体位置已经出现频率等等,以快速定位关键字、节约存储空 间及提高查询效率。 于是索引结构变为: 第二章 Lucene 及项目相关技术分析 9 关键字关键字 文章号文章号出现频率出现频率出现位置出现位置 guangzhou a2 3, 6 he b1 1 i a1 4 live a2,b1 2, 5, 2 shanghai b1 3 tom a1 1 所有关键字按字符顺序排列,查找用二元搜索算法快速定位,该过程通常 为毫秒级。若采用普通的顺序匹配算法,则在所花时间上令人难以忍受。 .2 LuceneLucene 索引结构索引结构3 Lucene 的索引采用了一套非常高效的数据结构,通常以单个或一系列的索 引文件形式存放在系统目录中。索引文件根据需要可以存放在硬盘和内存中。 放在硬盘中的索引用 FSDirectory 管理,放在内存中的索引用 RAMDirectory 管 理。内存索引检索快,但关机后丢失,硬盘索引可长期保存但检索需要进行 I/O 操作,延缓了检索速度,实际使用时,两者经常综合使用。 Lucene 实现该倒排序索引结构时,将上面 3 列分别作为词典文件(Term Dictionary)、频率文件(frequencies)、位置文件(positions)保存。词典文件除 保留关键字外还保留了指向频率文件以及位置文件的指针。 索引结构由上而下可以分为索引(index)、索引段(segment)、索引文档 (document)、索引域(field)和索引项(Term)几个不同层次。 开源搜索引擎技术探索与研发 10 Segment1 Segment2 Document1 Document2 Field2 Field1 Term2 Term1 图图 2-2: Lucene 索引逻辑结构索引逻辑结构 (1) 索引项(Term)是索引管理的最小单位,在程序中不会被显式调用,由后 台对每个索引域(Field)进行分割,得到索引项(Term)以建立索引。 (2) 索引域(Field)是索引文档(Document)的组成单位 Field 的其中一个构造函数 Field(String name, String value, Store store, Index index) 其中 name 属性一般是一个相对固定的字符串参数,比如“title”、“path”、 “content”、“modified”等等。检索时可以用来定位检索范围。 域 Store 的属性支持 Store.NO,Store.YES,用以决定该 Field 是否被存储。 Index 的属性支持 Index.NO,Index.ANALYZED,Index.NOT_ANALYZED 等 等用以决定该 Field 是否会被索引以及是否忽略规范。 Lucene 中未索引域的数据不能作为检索和查找对象。上述两个属性的 应用例如 Document 的标题会被存储同时被索引,而 modified 信息会被存储 而不会被索引。而另外一些信息则需要被索引而不会存储以节省空间。 第二章 Lucene 及项目相关技术分析 11 Field(String name, byte value, Store store) Field(String name, Reader reader) Field(String name, Reader reader, TermVector termVector) Field(String name, String value, Store store, Index index) Field(String name, String value, Store store, Index index, TermVector termVector) (3) 索引文档(Document)不同于我们一般而言的 Word、电子文本等文件。 它是 Lucene 引入用以检索索引项的一级管理构架。一个 Document 包含 着许多域,这些域信息包括创建时间、文件大小、来源、类型以及附属 摘要信息等等。众多的文档集合在一起形成文本文件与其他附属信息构 成索引。 在索引创建过程中会产生许多的中间文件,对大量的信息数据进行分门别 类地保留,而最终 Lucene 会默认将众多的文件信息合并并优化。 图图 2-3: Lucene 复合索引目录图复合索引目录图 Segments_*文件描述一组索引的参数,使用文件头固定格式。 Segment.gen 是文件存储索引的创建参数 Cfs、cfx 用以存储实际的索引数据段 开源搜索引擎技术探索与研发 12 图图 2-4: 由由 Lucene 开发者提供的索引结构图开发者提供的索引结构图 .3 LuceneLucene 索引建立索引建立 为了对文档进行索引,Lucene 提供了五个基础类,他们分别是 Document、Field、IndexWriter、Analyzer、Directory. 其中 Document 与 Field 在上文中有介绍。 (1) Analyzer: 在一个文档被索引之前,首先需要对文档内容进行分词处 理,这部分工作就是由 Analyzer 来做的。Analyzer 类是一个抽象类,它有多 个实现。针对不同的语言和应用需要选择适合的 Analyzer。Analyzer 把分词 后的内容交给 IndexWriter 来建立索引。 (2) IndexWriter :IndexWriter 是 Lucene 用来创建索引的一个核心的类, 他的作用是把一个个的 Document 对象加到索引中来。 (3) Directory :这个类代表了 Lucene 的索引的存储的位置,这是一个 抽象类,它目前有两个实现,第一个是 FSDirectory,它表示一个存储在文件系 统中的索引的位置。第二个是 RAMDirectory,它表示一个存储在内存当中的索 引的位置。 熟悉了建立索引所需要的这些类后,我们就开始对某个目录下面的 文本文件建立索引了,对某个目录下的文本文件建立索引的关键源代码: public class TxtFileIndexer public static void main(String args) throws Exception 第二章 Lucene 及项目相关技术分析 13 /indexDir is the directory that hosts Lucenes index files File indexDir = new File(“D:luceneIndex“); /dataDir is the directory that hosts the text files that to be indexed File dataDir = new File(“D:luceneData“); Analyzer luceneAnalyzer = new StandardAnalyzer(Version.LUCENE_CURRENT); File dataFiles = dataDir.listFiles(); IndexWriter indexWriter = new IndexWriter(FSDirectory.open(indexDir), luceneAnalyzer, true, new IndexWriter.MaxFieldLength(1000000); long startTime = new Date().getTime(); for(int i = 0; i ,例如:当前词为“阿拉伯语” ,上一个词 为“阿拉伯” ,那么“阿拉伯语”压缩为。其次大量用到的是对数字的 压缩,数字只保存与上一个值的差值(这样可以减小数字的长度,进而减少保 存该数字需要的字节数) 。例如当前文章号是 16389(不压缩要用 3 个字节保存) ,上一文章号是 16382,压缩后保存 7(只用一个字节) 。 在之前的代码中有用到 writer.Optimize()这段代码.Optimize 到底做了什么? 让你吃惊的是这里的优化对于建立索引不仅没有起到加速的作用,反而是延长了 建立索引的时间.为什么? 因为这里的优化不是为建立索引做的,而是为搜索做的.之前我们提到 Lucene 默认每遇到 10 个 Segment 就合并一次,尽管如此在索引完成后仍然会留下几个 segmnets,比如 6,7.而 Optimize 的过程就是要减少剩下的 Segment 的数量,尽量让 它们处于一个文件中.它的过程很简单,就是新建一个空的 Segmnet,然后把原来的 几个 segmnet 全合并到这一个 segmnet 中,在此过程中,你的硬盘空间会变大,因为 同时存在两份一样大小的索引.不过在优化完成后,Lucene 会自动将原来的多份 Segments 删除,只保留最后生成的一份包含原来所有索引的 segment. 当然也不是随时做 Optimize 就好,如前所述做优化时要花费更多的时间和空 间,而且在做优化的时候是不能进行查询的.所以索引建立的后期,并且索引的内 容不会再发生太多的变化的时候做优化是一个比较好的时段. 第二章 Lucene 及项目相关技术分析 15 2.32.3搜索器实现及详解搜索器实现及详解 准备索引目录 索引已 经建立 实例化 IndexSearcher生成检索 Query 类对 象 查询生成 Hits 结果集关闭 IndexSearcher 结 束 图图 2-5: Lucene 基本搜索工作过程基本搜索工作过程 部分实现代码 reader = IndexReader.open(FSDirectory.open(new File(indexPath), true); IndexSearcher searcher = new IndexSearcher(reader); QueryParser qp = new QueryParser(Version.LUCENE_CURRENT, “contents“, analyzer); Query query = qp.parse(queryString); TopDocs hits = searcher.search(query, MAX_DOCS); .1 查询封装查询封装 QueryQuery 类类 Query 对象用于根据用户搜索关键字构造检索的实例对象,一个 Query 对象 代表一个查询请求。Query 本身是抽象类,通过一系列子类来表达需求。 常用的 Query 子类包括 BooleanQuery(逻辑组合搜索)、RangQuery(用于区间 范围搜索)、TermQuery(最小项搜索)、PrefixQuery(前端匹配搜索)、 PhaseQuery(短语查询)、WildcardQuery(通配搜索)、FuzzyQuery(模糊搜索)等。 它们之间进行组合和互补,可以使查询手段相对智能。 开源搜索引擎技术探索与研发 16 .2 多个搜索器跨索引检索多个搜索器跨索引检索 可以构造多个检索器分别在不同的索引库中进行索引,然后将这些查询结 果进行有效整合,得到更为广阔的搜索结果范围。 这在分布式索引以及垂直搜索方面有较广泛的应用。分布式索引能够有效 地分摊服务器大量 I/O 操作的负担。当然此功能在后面的项目中被实现的目的 在于综合各类文档搜索结果,整合显示到用户面前,避免重复多次搜索。 IndexReader reader1 = IndexReader.open(FSDirectory.open(new File( index_path1), true); IndexReader reader2 = IndexReader.open(FSDirectory.open(new File( index_path2), true); IndexSearcher searchers = searcher1, searcher2 ; MultiSearcher msearcher = new MultiSearcher(searchers); Term t = new Term(“contents“, queryString); Query query = new TermQuery(t); TopDocs = msearcher.search(query, MAX_DOCS); 2.42.4 LuceneLucene 结果排序结果排序 排序质量与搜索引擎收录的数据量及准确率构成了评价搜索引擎好坏的核 心因素。用户的耐心往往仅限于停留在搜索引擎给出的结果集中的前两页上。 实际系统应用中对关键字匹配的计算主要采用向量空间模型,它是把文档 映射成一个关键词特征向量,采用 TF-IDF 方法计算加权词频。在查询过程中, 通过检索过程的关键词与文档的相关度计算,得到每个文档与检索短语的相似 度。对最后的匹配结果集进行排序。 在 TF-IDF 算法中,文档集中包含某一关键词的文档越多,说明它区分文档 类别属性的能力越低。权值越小;另一方面,某一个文档中某一关键词出现的 频率越高,说明它区分文档内容属性的能力也就越强,其权值也就越大。 Sort 类是 Lucene 自带的一个排序工具,通过它,可以方便地对检索结果进 行排序。 Sort 类因为与 org.apache.lucene.search 包中,在使用它时,只需要实 例化一个 Sort 对象,并使用 Searcher 提供的 search(Query, Sort)接口来实现。事 实上,Sort 所提供的排序功能是以 Field 为基础,经过这样的处理,最终的排序 第二章 Lucene 及项目相关技术分析 17 就转变成所有文档中同一个 Field(或多个 Field)的值的排序。 2.52.5 LuceneLucene 的过滤器的过滤器 在 Lucene 中,有两种过滤器搜索过滤和分词过滤,在这里所介绍的是 和搜索相关的一种过滤器。 Lucene 提供 Filter 类对搜索结果进行过滤。比较常 用的一个子类是 RangFilter,是用于过滤在一定范围内出现的文档。例如,某个 Document 集中有 date(日期)这样一个 Field,在搜索的结果中,想保留所有 自“1999-01-01”至“2009-12-31”这个区间内的文档,而把其他文档都过滤掉,就 可以这样建立一个 RangeFilter:RangeFilter filter = new RangeFilter(“date”, “1999-01-01”, “2009-12-31”,true, true);其中的两个 Boolean 参数都设置为 true 表 示为把上界和下界都包含进来。然后再把这个 filter 传递到 Searcher.search(Query, Filter)这个方法中,就可返回过滤后的文档集。 当一次检 索完毕后,希望能从上一次检索的结果集合中进行二次检索。这种功能在一些 信息检索系统中非常重要,用户往往希望一步步地缩小结果集合,以便能够更 好地对信息进行筛选。这种筛选过程,起行为与 Filter 所要完成的工作非常类 似,都是过滤掉一部分文档,只留下另一部分文档。因此,Lucene 提供了内置 的 QueryFilter 来帮助完成这种功能。QueryFilter 通过传入一个 Query 来构建然 后传入 Searcher 的静态方法 search(Query, Filter)中。 2.62.6 中文分词中文分词 .1 中文切词存在的问题及主要的分词方法中文切词存在的问题及主要的分词方法 为什么要把中文切词从文本分析处理中单独罗列出来呢? 上述论述中在进行词元分割处理时是以英文为例,英文文档本身就是以词 为单位的组织,英文单词与单词之间都有空格因此能很容易进行分解得到关键 词。故英文文档处理几乎不必考虑分词的算法。而在处理中文的时候,字与字 之间没有分隔标记,而简单地将字与字分割又几乎没有任何意义,如何确定最 小索引项成了一个难题。在进行关键字索引的建立时又该如何处理,怎么得到 开源搜索引擎技术探索与研发 18 中文关键词组呢?又该如何正确的将语句切割成有意义的词组,尽量避免歧义 的产生?中文分词是整个中文信息处理的基础。 在经过许多热心的高级技术人员的努力下,Internet 上已经产生了众多的中 文分词方案,并能与 Lucene 进行有效地整合。如 IKAnalyzer、庖丁解牛、 mmseg4j 等等以及 Lucene 近期版本所支持的中文分词器 CJKAnalyzer。 主要的中文分词技术有 3 中,基于字符串匹配的分词方法、基于语义的分 词方法以及基于统计的分词方法。 一、一、基于字符串匹配的分词方法基于字符串匹配的分词方法 1) 正向最大匹配算法(从左到右) 算法思想: a) 将文章分成句子(通过标点符号来实现); b) 循环的读入每一个句子 S,设句子中的字数为 n; c) 设置一个最大词长度,就是我们要截取的词的最大长度 max; d) 从句子中取 n 到 n+max 的字符串 subword,去字典中查找是否有这 个词。 e) 如果有就走 f),没有就走 g); f)记住 subword,从 n+max 付值给 n,继续执行(4),直到 n=0。 g) 将 max-1,再执行(d)。 2) 逆向最大匹配算法(从右到左) 算法思想与正向最大匹配算法雷同,是取从 n-max 到 n 的 subword。 3) 最少切分(使每一句中切出的词数最少) 许多时候不同的切割方法会产生不同的结果,导致歧义的产生。如“鞋子和 服装”,正向最大匹配产生的结果可能是鞋子和服装,而逆向最大匹配产生 的结果会是鞋子和服装。这是切分方法导致的歧义。.又如“结合成分子时” (正向最大匹配和逆向最大匹配结果相同)分词结果为结合成分子时,结果 还是错的 一般情况下,中文分词器会将两者进行综合,如“鞋子和服装”分解成文鞋 子 和服 和 服装。虽然并不是句子的确切本意汉语博大精深,意深而 词妙。往往一词之差而谬以千里。有点时候,句子本身也带有歧义。但是分词 第二章 Lucene 及项目相关技术分析 19 器要考虑方方面面的要求以尽量满足用户的需求,而因此产生的检索命中错误 我们也只能尽可能减少,这是不可避免的。 二、二、基于语义理解的分词基于语义理解的分词 也就是让计算机模拟人脑对语义的识别和句子的理解。按照中文语法语义 进行模拟分析和处理调度。然而正常人都往往会错解句子的含义,让电脑模拟 出高正确率的识别效果还有待技术的进一步发展 三、三、基于统计的分词方法基于统计的分词方法 这是基于词频的统计分词法,通常也具有比较可信度。网上可以下到像搜 狗整理出来的词库,这种方法可以说是一种与时俱进的方法。因为随着时代的 变迁,文化的交融,中文也在发生着巨大的改变,新生词汇如雨后春笋般涌现, 有的词汇甚至是毫无道理毫无规律可言。这在另一方面也加深了中文分词的难 度。 .2 IKAnalyzerIKAnalyzer IKAnalyzer 是一种高效的中文分析器,它实现了以词典分词为基础的正反 向全切分,以及正反向最大匹配切分两种方法。 原句:原句:永和服装饰品有限公司 切分后:切分后:永和| 和服| 服装| 装饰品| 装饰| 饰品| 有限| 公司 IKAnalyzer 不仅可以较好地支持 Lucene,同时还提供了用户拓展自定义词库 及停止词库。 2.72.7 网络蜘蛛网络蜘蛛(Spider)(Spider) .1 什么是网络蜘蛛什么是网络蜘蛛 网络蜘蛛即 Web Spider,又称网络爬虫,是一个很形象的名字。把互 联网比喻成一个蜘蛛网,那么 Spider 就是在网上爬来爬去的蜘蛛。网络蜘 开源搜索引擎技术探索与研发 20 蛛是通过网页的链接地址来寻找网页,从 网站某一个页面(通常是首页) 开始,读取网页的内容,找到在网页中的其它链接地址,然后通过这些链 接地址寻找下一个网页,这样一直循环下去,直到把这个网 站所有的网 页都抓取完为止。如果把整个互联网当成一个网站,那么网络蜘蛛就可以 用这个原理把互联网上所有的网页都抓取下来。 .2 SpiderSpider 工作原理工作原理 Internet 是基于众多相关协议的,Web 建立于 HTTP(Hypertext Transfer Protocol)协议之上,而 HTTP 协议又是建立在 TCP/IP(Transmission Control Protocol / Internet Protocol)协议之上,同时它也是一种 Socket 协议,故 Spider 即 网络机器人本质上其实是一个基于 Socket 的多线程网络程序。 网络蜘蛛进入一个网站,一般会访问一个特殊的文本文件Robots.txt, 这个文件一般放在网站服务器的根目录下, 网站管理员可以通过 robots.txt 来定义哪些目录网络蜘蛛不能访问,或者哪些目录对于某些特定的 网络蜘蛛不能访问。例如有些网站的可执行文件目录和 临时文件目录不希 望被搜索引擎搜索到,那么网站管理员就可以把这些目录定义为拒绝访问目 录。 理论上从网络上任意一个 URL 出发,都可以遍历整个 Internet,到达任何的 URL 上。然而,要综合考虑访问代价、技术限度、访问风险、传输风险、网络 带宽、可用资源及网站拥有着基于隐私的保护或各种各样的屏蔽措施等等条件 和限制。被 Spider 收集下来的网站资源根本不足 Internet 上的万一,而用户在 浏览器上所能观看到的又会由于搜索引擎算法自身的过滤,更新的延迟,数据 存储及传输的风险及政策等等的限制,同样不足相关性文件的万一,同时考虑 到用户耐心或小部分疏忽,真

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论