logo资料库

全文检索技术(自己总结).doc

第1页 / 共8页
第2页 / 共8页
第3页 / 共8页
第4页 / 共8页
第5页 / 共8页
第6页 / 共8页
第7页 / 共8页
第8页 / 共8页
资料共8页,全文预览结束
流程: 全文检索定义,全文检索系统,搜索引擎流程关键模块,分类及相关名词,目前较为流行的 索引技术(详细),具体 Lucene 的技术分析 包括:名词解释,类包,关键类,类结构及关系,常用分词器,解析器  基本概念: 1、全文检索技术: 通过程序扫描文章后分析出关键字、词,对其建立索引并指明其在文章中的次数和位置等信 息;按关键字查询时,程序根据建立好的字词索引可以快速查找,反馈结果给用户。类似字 典中检索字词的过程。 2、全文检索系统(目前是指搜索引擎):网页爬取器、索引管理器、查询器是搜索引擎主要 工作模块,针对特殊语言(中、韩)的检索需要有专门的分词器对语句进行解析,词库可以 辅助分词器工作使其更准确。 1、网页爬取程序依据网页内部 URL 之间的关联性自动爬取整个互联网,并对爬行过的 网页进行抓取收集。 2、根据收集的网页,索引分析程序进行分析(包括分词及词关联信息的收集),依据指 定算法创建倒排序的索引库。 3、使用者通过搜索界面提交关键词进行搜索,并返回搜索结果。 搜索引擎并不是对互联网进行直接搜索,而是对已抓取网页索引库搜索,所以其可以快速返 回搜索结果,索引算法的效率直接影响搜索引擎的效率。 **中文分词:文本分析器其中主要功能之一是文章的分词,对于英文语系的语言因为其空格 有词义分隔的作用所以分词器的功能不复杂,对于中文语系的文章没有可以直接分隔词义的 标识,导致中文分词的复杂性。 英文是独立的词建索引并检索,语义的理解比较容易,对语句进行单词级别拆分就可以, eg. I am a teacher.拆成 I,am,a,teacher 中文是独立的字结合独立语义的词(字的组合)建立索引并检索,语义理解比较复杂,
eg. 中文分词到底对搜索引擎有多大影响? 单个字的索引建立;关联字建立(中文、文分、分词。。。);词库分词(中文、分词、中文分 词。。。。);  搜索引擎分类: 1、门户分类,baidu、google。。。。 2、工作方式,全文搜索引擎(本文主要分析的)、目录索引(没有搜索比较复杂的分类, 如各个门户主页)、元搜索引擎(多个搜索引擎获取结果整合,如 search.infospace.com) 3、用途不同,通用搜索引擎,垂直索引*、桌面搜索引擎*,分布式文件管理服务* 4、实现方式不同, 通用搜索引擎,数据库全文检索(oracle text),数据库搜索引擎集成 (DB+数据持久化工具+搜索引擎,如 Compass,Hibernate Search)、基于数据库 xml 接口全 文检索(XQEngine 基于 xquery 语言 xml 全文检索)*  相关名词解释: 1. 垂直索引,平行索引(通用索引) 垂直索引:专业性、行业性索引的一个方向性概念,区别于传统通用索引方式,其原理 是定时按照某一专业方向(如买房、选股)在网络爬取信息,在此信息的基础上详细分类即 将非结构化信息转化为结构化信息(可以结合其他技术完成如 通用索引、数据库、垂直索 引架构实现),以专业性交互页面展现给用户并反馈相关结果。 关键问题:主要解决带检索海量信息结构化,在一些网页针对爬取程序不友好情况下深 入获取信息(如格式信息无法解析、信息发爬取) 发展案例:yahoo 推出旅游搜索、goolge 的本地搜索、baidu 的地图搜索、歌曲、视频 搜索 **就是用户无法描述道他要找什么,除非让他看到想找的东西,这个过程有点像找对象, 碰运气是用户搜索行为的最大的特征。而垂直搜索引擎就是提高为用户提供更好的运气。 2. 桌面搜索引擎 定义:为本地文件系统建立索引并实时更新维护,可以解决大硬盘文件信息查找问题。 即将搜索引擎应用到桌面程序。 应用:雅虎、谷歌等都发布自己的桌面搜索软件,目前可解析文件包括 Email、Word、 Excel、PowerPoint、PDF 等等多达 200 多种格式。百度 BaiduDS、谷歌 googledesktop 在桌 面搜索基础上集成个性工具等 特点:个人应用的桌面程序,支持多种文件内容解析,一般有文件操作监听并可动态更 新内容索引,建立文件索引时间较长,集成个性化功能,基于文件系统索引非 URL 连接(无 需爬虫及文件关联解析),有较多开源项目可以使用 易开发以维护,支持多种语言及文件编 码格式(文件编码不同操作系统语言不同) 3. 点对点(peer-to-peer,简称 P2P) 定义:是一种网络拓扑结构,网络程序发展方向 通过 udp 协议发广播维护 p2p 之间链 路(穿透 nat 等),再用 tcp 协议传递数据。 特点:对等互联网络技术,节点同时作为客户端和服务器端,没有中心服务器,没有中 心路由器,提供多节点协同工作基础平台,可以依据网络性能扩展节点辐射范围。 **pplive 原理 基于 p2p 软件传输方式,文件资源为什么可管理?因为其目录结构是规 定好的在此软件的网络链路数据目录是唯一的很难自主添加, 4. 分布式文件管理服务 CMS 内容管理服务(Content Management Service,CMS)
定义:基于 P2P 的文件管理服务,为服务下的数据文件在网络节点组中(即多个 CMS 群)提供一个唯一标识,并完成本地管理,为诸如 JXTA 系统提供文件管理支撑,使之完成 广播方式维护组内资源信息和数据的共享、文件结构浏览。 注:对于基于 p2p 概念的系统可以有 cms 中心服务器辅助管理各个节点文件目录,也 可以不设置,但配合软件功能决定。如:pplive 有,BT 没有。 5. 数据库结合搜索引擎应用 a-可以在数据库的基础上为某文本字段建立全文索引在海量数据模糊查询中比较常用, 可以提高查询速度。 如:数据库查询 字符串为"qiming-开发人员-dams" 查询关键字 "qiming dams" 基于 like 方法无法检索,通过全文索引建立 qiming,dams, 查询关键字 就可以完成。 b-对象关系映射框架下的全文检索实现。 如:Hibernate Search,hibernate 针对并基于 Lucene 集成方案,通过检索后直接获取 POJO(Plain Old Java Object) 注:是使用 Solr 与 Lucene 集成,Solr 是 Lucene 面向企业搜索应用的扩展. 6. 倒排索引 区别于常用的检索建立方式(直接为编号建立索引),而是以内容中常用关键字为索引 基础。 a-常用文件存储结构是:编号、内容(关键字),索引方式是编号索引. b-倒排索引建立方式是以内容关键字建立索引:关键字、编号(及关键字位置等信息),索 引方式是关键字。 xml 数据库 7. 定义:XML 数据库是一种支持对 XML 格式文档进行存储和查询等操作的数据管理系 统。在系统中,开发人员可以对数据库中的 XML 文档进行查询、导出和指定格式的序列化。 MS、IBM、ORACLE 都提供对其的支持。 分类: XMLEnabledDatabase(XEDB)通过映射关系或第三方工具包,将 RDBMS 映射为 xml 形 式 oracle9 之前 NativeXMLDatabase(NXD),以 XML 文档作为基本的逻辑存储单位,针对 XML 的数据 存储和查询特点专门设计适用的数据模型和处理方法。oracle10i HybridXMLDatabase(HXD),混合 XML 数据库。根据应用的需求,可以视其为 XEDB 或 NXD 的数据库,典型的例子是 Ozone(Java 面向对象的数据库,可存储 xml)。【haibrid】 8. Oracle XML DB 定义:oracle 扩展功能,是 xml 数据数据库实现方案,10i 有较完善的支持。数据库是 基于 Oracle XML DB 服务,使用 oracle 提供的脚本语言,在数据库中创建 xml 结构表,导 入 xml 数据,并实现数据新增修改查询功能。可通过 SCHEMA 标识语言指定 xml 数据格式。 eg。创建 xml 表 create table xmlcontent (keyvalue varchar2(10) primary key, xmlvalue xmltype); 特点:查询速度快,通过 xml 通用载体实现数据库与程序语言交互(独立于 jdbc、数据映射 访问方式)支持 Xquery 查询引擎,可直接用新版本 java 语言访问。 xquery 9. 定义:扩展于 Xpath,类似 sql 语句的表达式语言,可以访问 xml 数据库或文件。 特点:W3C 标准表达式的语言(正则表达式,xpath 类似标示符)、用于 xml 数据查询 语言、对于 XML 类似于 sql 对于数据库的作用、建立 xpath 表达式基础上、被几个主要数 据库引擎支持(IBM、ORACLE、MS)(通常是数据可以通过 JDBC、实体对象关连) 实现:java 类库实现 xml 数据 xquery 方式查询方法。
eg。 XQDataSource ds = new SaxonXQDataSource(); XQConnection conn = ds.getConnection(); XQPreparedExpression exp = conn.prepareExpression("for $x in doc(\"data/books.xml\")/bookstore/book where $x/price>30 return else {data($x/title)}"); XQResultSequence result=exp.executeQuery(); ($x/@category=\"CHILDREN\") if then {data($x/title)} XQJ:用于解析 xquery 语言的标准,java 已经实现其标准  主要索引技术 oracle 全文检索系统 1. oracle9i 提供 oracle text 服务可以完成数据库扩展的全文检索功能。 定义:基于 oracle text 服务,为全文检索字段设置对象属性,完成全文检索设置。包括 数据存储逻辑、过滤器(转换数据格式为 html/xml)、分段器(取出 xml 内标识符转化为纯 文本)、词法分析器(分析文本解析为字词)、索引引擎(为字词建立索引,并提供索引查询) 配置:通过 oracle 内置配置类属性完成对索引的配置。存储(Storage)类、数据存储 (Datastore)类、文档段组(Section Group)类、相关词表(Wordlist)类、索引集(Index Set)、 词法分析器(Lexer)类、过滤器(Filter)类、非索引字表(Stoplist)类。 特点:可以通过简单配置完成较为复杂的全文检索功能,完全独立于开发语言,可扩展 性有限没有接口概念对于提供的解析器、过滤器、语法分析器功能扩展困难。 eg。CREATE INDEX doc_index ON docs(text) INDEXTYPE IS CTXSYS.CONTEXT;建立 对应表字段索引 SELECT id FROM docs WHERE CONTAINS (text, 'first') > 0;使用 contains 函数全文检 索 2. Lucene (Lucene Java 2.4.1) Lucene 不是一个具有完整特征的搜索应用程序,而是一个专注于文本索引和搜索的工 具包,能够为应用程序添加索引与搜索能力.Lucene 本身只支持文本文件及少量语种的索引, 并且不具备爬虫功能,但是它提供了丰富接口。它根据自身需要添加具体语言的分词器,针
对具体文档格式使用不同解析器等。具体功能可以借助第三方开源项目完成,比如 LIUS、 Nutch。这样使得其逐渐成为一个标准。 3. Nutch (2009-04 发布 1.0 版本) 定义:Apache 基金下基于 Lucene 完整 web 搜索工具包,主要包括爬虫 crawler 和查询 searcher。Crawler 主要用于从网络上抓取网页并为这些网页建立索引。Searcher 主要利用这 些索引检索用户的查找关键词来产生查找结果。两者之间的接口是索引,所以除去索引部分, 两者之间的耦合度很低。 特点:主要关注方向为实现 web 搜索引擎系统。 4. LIUS (Lucene Index Update and Search) 以 Lucene 为基础文本索引框架(搜索引擎开发工具包)。 特点:主要应用于多种格式文件索引建立,及数据库全文索引方案的实现。 1、借助开源程序包扩展文件解析检索功能,文件包括 MS Word、MS Excel、MS PowerPoing、RTF、PDF、XML、HTML、TXT、Open Office、JavaBeans; 2、对 Java Beans 的支持对于进行数据库索引非常有用,在用户进行对象关系映射(如: Hibernate、JDO、TopLink、Torque 等)的数据库连接编程时会变得更加精确。 3、在 Lucene 的基础上增加了索引更新功能,使针对索引的维护功能进一步完善。 4、支持混和索引(把与一内容相关可能格式不同内容整合一起),适合多种不同格式的 文档同时进行索引。 5. Compass 罗盘 特点:比较完整的数据库索引实现,可以与多种数据库持久化技术(JPA、Hibernate、 OJB、JDO、iBatis)实现整合。 6. Zilverline Zilverline 是一款以 Lucene 为基础的桌面搜索引擎 特点:本地磁盘及局域网内容的搜索;支持多种语言;多种文档格式索引支持(MSOffice 文档、RTF、Java、CHM、zip、rar);支持增量索引的方式;可定期自动索引;多种索引文件 存储访问格式(基本文件格式 linux、windows、光盘格式);可以结合 web 服务,完成文件路径 到 URL 的映射,这样可以使用户远程搜索本地文件。 **文件路径到 URL 的映射:文件到 url 映射是通过服务器中间件完成的,对于没有在中 间件范围内的文件完成映射可以 通过文件读写代码借助中间件反馈成 url 文件结构 JXTA 7. juxtapose[dʒʌkstəpəuz]把…并列, 把…并置 把…放在另一个旁边 关于检索:Sun 公司 在 对等网络(P2P)资源检索及传输通信方面提出的带有多个协议 以 JAVA 方式实现开源工具包,检索文件只是其中一部分功能且不是全文索引。资源检索方 面实际上是内容管理服务(Content Management Service,CMS) 定义:JXTA Search 是一个分布式的搜索系统.设计用在点对点的网络与网站上.是一个类 BT 下载技术中文件检索功能的 JAVE 具体实现方案。JXTA 实际上是一组规范是(六个协议 组成)不限于 Java,只是目前只有 JAVA 的规范实现版本,彻底独立于操作系统、网络传输 技术以及程序设计语言 实现过程:每个 peer 对本地的目录做检索,对于不同文件,建立 AdvertiSement (广告) 内包括文件信息资源、唯一标示,一 peer 请求后在每个可以找到的 peer 寻找目标资源,匹 配后回复,同时目标 peer 转发请求,协助寻找资源。直到类似 TTL 步数限制。
Kademlia 比较早的一个标准 ,BiTtorrent、emule 软件中实现  Lucene 1、Lucene 为构架强大的 java 搜索引擎工具包,内置完整的索引创建查询算法,常用的 英法语言分词器,和文本解析器,并且可以在现有 Lucene 基础上对其进行扩展完成多语种 分词(中日韩等),多文档格式解析的支持(PDF、WORD、EXCEL、HTML 等)。 2、功能包结构 org.apache.lucene.index 对索引文件的操作,包括创建更新索引文件操作类,IndexWriter、 IndexReader。 org.apache.lucene.store 作为 index 文件操作调用。 org.apache.lucene.analysis 语言分析包,主要包含分词工具 Analyzer 接口,对于中文可 以扩展。 org.apache.lucene.document 索引文档解析包,包含 Document、Field、Term 的定义和操 作,可以扩展 Document 接口实现多文件格式解析功能。 org.apache.lucene.search 索引查询包,包括检索及在其获取文件信息等。IndexSearcher 索引方法,Hits 索引信息保存。 apache.lucene.queryPaser 作为 search 语法解析器调用。 功能类包关系 3、Lucene 基础类 Document 是用来描述文档的,这里的文档可以指一个 HTML 页面,一封电子邮件, 或 者 是 一 个 文 本 文 件 。 一 个 Document 对 象 由 多 个 Field 对 象 组 成 的 。 可 以 把 一 个 Document 对象想象成数据库中的一个记录,而每个 Field 对象就是记录的一个字段。 Field 对象是用来描述一个文档的某个属性的,比如一封电子邮件的标题和内容可以用 两个 Field 对象分别描述。 Analyzer 在一个文档被索引之前,首先需要对文档内容进行分词处理,这部分工作就是 由 Analyzer 来做的。Analyzer 类是一个抽象类,它有多个实现。针对不同的语言和应用需 要选择适合的 Analyzer。Analyzer 把分词后的内容交给 IndexWriter 来建立索引。 IndexWriter 是 Lucene 用 来 创 建 索 引 的 一 个 核 心 的 类 , 他 的 作 用 是 把 一 个 个 的 Document 对象加到索引中来。 Directory 这个类代表了 Lucene 的索引的存储的位置,这是一个抽象类,它目前有两个
实现,第一个是 FSDirectory,它表示一个存储在文件系统中的索引的位置。第二个是 RAMDirectory,它表示一个存储在内存当中的索引的位置。 4、分词器: 索引对象概念结构 1、WhitespaceAnalyzer:仅仅是去除空格,对字符没有 lowcase 化,不支持中文。 2、SimpleAnalyzer:功能强于 WhitespaceAnalyzer,将除去 letter 之外的符号全部过滤掉, 并且将所有的字符 lowcase 化,不支持中文。 3、StopAnalyzer:StopAnalyzer 的功能超越了 SimpleAnalyzer,在 SimpleAnalyzer 的基 础上 增加了去除 StopWords 的功能,不支持中文。 4、StandardAnalyzer:英文的处理能力同于 StopAnalyzer.支持中文采用的方法为单字切 分. ChineseAnalyzer:来自于 Lucene 的 sand box.性能类似于 StandardAnalyzer,缺点是不支持中 英文混和分词。 5 、 CJKAnalyzer : chedong 写 的 CJKAnalyzer 的 功 能 在 英 文 处 理 上 的 功 能 和 StandardAnalyzer 相同,但是在汉语的分词上,不能过滤掉标点符号,即使用二元切分。 5、实例: //建立索引 Analyzer luceneAnalyzer = new StandardAnalyzer(); IndexWriter indexWriter = new IndexWriter( new File("C:\\luceneData"),luceneAnalyzer,true);// 索引文件目录 Document document = null; document = new Document(); document = HTMLDocument.Document("c:\\dates\\test.html");//自定义 网上可查 document = LucenePDFDocument.getDocument("c:\\dates\\test.pdf");//--pdfbox Reader txtReader = new FileReader(new File("c:\\dates\\test.txt")); document.add(Field.Text("path",""c:\\dates\\test.txt""); document.add(Field.Text("contents",txtReader)); indexWriter.addDocument(document); indexWriter.optimize(); indexWriter.close(); //查询
SearchFile searchFile = new SearchFile("C:\\luceneData");//索引文件目录 Analyzer analyzer = new StandardAnalyzer(); Hits hits = = searchFile.searchFile("关键字", analyzer); for (int j = 0; j < hits.length(); j++) { Document document = hits.doc(j); documentpath = document.get("path"); }
分享到:
收藏