基于Lucene的网站全文搜索的设计与实现.

合集下载

《基于Lucene的蒙古文搜索引擎的设计与实现》范文

《基于Lucene的蒙古文搜索引擎的设计与实现》范文

《基于Lucene的蒙古文搜索引擎的设计与实现》篇一一、引言随着信息技术的飞速发展,搜索引擎已经成为人们获取信息的重要工具。

蒙古文搜索引擎作为服务于蒙古语用户的信息检索工具,其设计与实现显得尤为重要。

本文将介绍基于Lucene的蒙古文搜索引擎的设计与实现过程,旨在为相关研究和应用提供参考。

二、需求分析1. 用户需求:蒙古文搜索引擎需满足用户快速、准确地搜索蒙古文信息的需求。

同时,用户期望搜索引擎具有友好的界面和良好的用户体验。

2. 功能需求:蒙古文搜索引擎应具备基本的搜索功能,如全文搜索、关键词搜索、高级搜索等。

此外,还需支持对搜索结果的排序、筛选和分享等功能。

三、系统设计1. 技术选型:选用Lucene作为搜索引擎的核心技术,其强大的全文搜索功能和高效的索引管理机制能够满足蒙古文搜索引擎的需求。

2. 系统架构:采用分层架构设计,将系统分为数据层、索引层、搜索层和用户层。

数据层负责存储蒙古文数据,索引层负责建立和管理索引,搜索层负责提供搜索服务,用户层负责与用户进行交互。

3. 数据库设计:选用适合蒙古文的数据库管理系统,建立数据表结构,用于存储蒙古文文档、关键词、索引等信息。

4. 索引策略:采用倒排索引技术,对蒙古文文档进行分词、过滤和建立索引,以提高搜索效率和准确性。

四、系统实现1. 数据预处理:对蒙古文文档进行分词、去停用词等预处理操作,以便建立准确的索引。

2. 索引建立:使用Lucene的API建立倒排索引,将预处理后的文档数据存储到索引中。

3. 搜索服务:提供基本的搜索功能,如全文搜索、关键词搜索、高级搜索等。

同时,支持对搜索结果的排序、筛选和分享等功能。

4. 用户界面:设计友好的用户界面,提供简洁明了的操作方式和良好的用户体验。

五、性能优化1. 索引优化:定期更新索引,删除无效的索引项,以提高搜索速度和准确性。

同时,采用多线程技术加速索引建立过程。

2. 查询优化:针对不同的查询需求,采用不同的查询策略和算法,以提高搜索效率和准确性。

基于Lucene全文检索系统的研究与实现

基于Lucene全文检索系统的研究与实现

基于Lucene全文检索系统的研究与实现[摘要] lucene是一个开放源代码的全文检索引擎工具包,利用它可以快速地开发一个全文检索系统。

利用lucene开发了一个全文检索系统,通过其特殊的索引结构,实现了传统数据库不擅长的全文索引机制,提供了对非结构化信息的检索能力。

[关键词] lucene 信息检索全文检索索引一、引言计算机技术及网络技术的迅速发展,使得internet成为人类有史以来资源最多、品种最全、规模最大的信息资源库。

如何在这海量的信息里面快速、全面、准确地查找所需要的资料信息已经成了人们关注的焦点,也成了研究领域内的一个热门课题。

这些信息基本上可以分做两类:结构化数据和非结构化数据(如文本文档、word 文档、pdf文档、html文档等)。

现有的数据库检索,是以结构化数据为检索的主要目标,实现相对简单。

但对于非结构化数据,即全文数据,由于复杂的数据事务操作以及低效的高层接口,导致检索效率低下。

随着人们对信息检索的要求也越来越高,而全文检索因为检索速度快、准确性高而日益受到广大用户的欢迎, lucene是一个用java写的全文检索引擎工具包,可以方便地嵌入到各种应用中实现针对应用的全文索引和检索功能。

这个开源项目的推出及发展,为任何应用提供了对非结构化信息的检索能力。

二、全文检索策略通常比较厚的书籍后面常常附关键词索引表(比如,北京:12,34页,上海:3,77页……),它能够帮助读者比较快地找到相关内容的页码。

而数据库索引能够大大提高查询的速度原理也是一样,由于数据库索引不是为全文索引设计的,因此,使用like “%keyword%”时,数据库索引是不起作用的,在使用like查询时,搜索过程又变成类似于一页页翻书的遍历过程了,所以对于含有模糊查询的数据库服务来说,like对性能的危害是极大的。

如果是需要对多个关键词进行模糊匹配:like“%keyword1%”and like “%keyword2%”……其效率也就可想而知了。

基于Lucene的二次全文检索系统设计与实现的开题报告

基于Lucene的二次全文检索系统设计与实现的开题报告

基于Lucene的二次全文检索系统设计与实现的开题报告一、选题背景和意义随着信息技术的飞速发展,互联网已经成为人们获取各种信息的主要渠道。

因此,如何快速、高效地从大量的文本数据中获取所需信息,成为一个亟待解决的问题。

全文检索系统由此应运而生,它能够对文本数据进行网页搜索、信息检索、自然语言处理等操作,是信息检索领域的核心技术之一。

在实际应用中,全文检索系统被广泛应用于搜索引擎、社交媒体、电子商务等领域,为人们提供了快捷、精准的信息服务。

本文将基于Lucene全文检索引擎,设计并实现一个二次全文检索系统。

全文检索系统可以寻找到所有文本中与某个关键词相关的信息,而二次检索系统则对全文检索的结果再次进行筛选和排序,以提高所需信息的准确性和相关性,从而提高信息检索的效率。

本文旨在研究二次全文检索系统的设计和实现,探究Lucene引擎在信息检索中的应用。

二、研究内容和方法2.1 研究内容(1)了解全文检索系统和二次全文检索系统的概念、特点和应用场景;(2)基于Lucene全文检索引擎,设计并实现一个二次全文检索系统;(3)构建文本语料库,实现数据的导入和索引;(4)研究相关算法,设计二次检索策略,提高信息筛选和排序的准确性和相关性;(5)对系统进行性能测试、优化和调试,并分析检索效果。

2.2 研究方法本研究采用的研究方法主要包括如下几点:(1)文献综述:对全文检索算法、Lucene引擎技术和二次检索策略进行深入学习和研究,了解国内外相关研究现状和最新进展。

(2)系统设计:通过对全文检索系统和二次检索系统的原理和特点进行分析,设计系统结构和算法流程。

(3)数据处理:构建文本语料库,实现数据的导入、处理和索引,保证数据能够准确、高效地被检索。

(4)算法实现:研究相关算法,设计二次检索策略,提高信息的筛选和排序准确性和相关性。

(5)系统测试:对系统进行测试、优化和调试,分析系统检索效果。

三、预期结果及意义3.1 预期结果(1)设计并实现基于Lucene的二次全文检索系统;(2)构建文本语料库,实现数据的导入和索引;(3)研究相关算法,设计二次检索策略,提高信息筛选和排序的准确性和相关性;(4)对系统进行性能测试、优化和调试,并分析检索效果。

lucene实现全文搜索

lucene实现全文搜索

lucene实现全文搜索1.什么是全文搜索全文检索是指计算机索引程序通过扫描文章中的每一个词,对每一个词建立一个索引,指明该词在文章中出现的次数和位置,当用户查询时,检索程序就根据事先建立的索引进行查找,并将查找的结果反馈给用户的检索方式。

这个过程类似于通过字典中的检索字表查字的过程。

2.什么是luceneapache lucene是一个开放源程序的搜寻器引擎,利用它可以轻易地为Java软件加入全文搜寻功能。

lucene的最主要工作是替文件的每一个字作索引,索引让搜寻的效率比传统的逐字比较大大提高,lucene提供一组解读,过滤,分析文件,编排和使用索引的API,它的强大之处除了高效和简单外,是最重要的是使使用者可以随时应自已需要自订其功能。

lucene是apache软件基金会项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,即它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎。

lucene的目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中实现全文检索的功能,或者是以此为基础建立起完整的全文检索引擎。

3.特点及优势lucene作为一个全文检索引擎,其具有如下突出的优点:1、索引文件格式独立于应用平台。

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

2、在传统全文检索引擎的倒排索引的基础上,实现了分块索引,能够针对新的文件建立小文件索引,提升索引速度。

然后通过与原有索引的合并,达到优化的目的。

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

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

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

基于Lucene全文检索引擎的研究与实现

基于Lucene全文检索引擎的研究与实现
同 类 型的 文 档 进 行 解 析 。 比如 对 于 HT ML 文 l 并 利 用 方 法 1 回 的结 果 得 到分 词 的 结 , 返 档, HTML 析 器 会 做 一 些 预 处 理 的 工 作 。 果 和 词 频 结 果 。 解 当从 文 本读 入 一 个 字 , 使
接 o ti( 来 s Ma 中是否 存在 这 巨大 反 响 , 序 员不 仅 使 用 它 构 建 具 体 的 HTM L解 析 器 输 出 的 是 文 本 内 容 , 着 用cnan) 判断Hah p 程 全 文 检 索 应 用 , 且 将 之 集 成 到 各 种 系 统 L c n 的分 词 器从 文 本 内 容 中 提 取 出素 引 而 ue e 个 字 的 映射 , 果 存 在 就 取得 长 度 等 于字 如
石 头一贾府 ” 行 分 析 , 进 先分 析 器 解 析 字符 串
2全文检索引擎Lcn u e e
2 1 uee . Lcn简介
L cn 是a a h 软件基金  ̄jk ra 目 u ee p c e a at 项 组 的 一 个 子项 目 , 一 个 开 放 源 代 码 的 全 是
检 索 索 引库 的 T e p中找 到 对 应 如 e Ma
首 先 , 入 查 询 条 件 , 如 用 户 希 望 查 的 映 射 则对 应 的 键 值 加 l 输 出 的时 候 在 输 比 ,
的 基 础 上 , 且 针 对L c n 中文 分 词 的 弱 询 到 含 有 词 “ 宝 玉 ? “ 头 但 不 含 “ 并 u ee 贾 和 石 贾 词 后 面 加 上 分 割 符 号 ‘ , 后 继 续 重 复 \’ 然 势 扩 展 设 计 了 一 个 相 对 完 善 的 中 文 分 词 府 ” 记 录 , 么 输 入 条 件 为 “ 宝 玉 +石 前 面 的 步 骤 , 到 文 件 结 束 , 出 ; 果 的 那 贾 直 退 如 器 , 实 现 了一 个 基 于 L c n 全文 检 索 技 头 一贾 府 ” 查 询 条 件 传 入 搜 索 器 (u e e 并 uee l 1cn . 读者 了解 和 使用 L c n 全 文 检索 引擎 提 供 ue e

基于Lucene的海量数据库全文检索的设计与实现

基于Lucene的海量数据库全文检索的设计与实现
徐叶强 ,朱艳辉 ,栗春 亮 ,王文华
( 湖南1 业大学 计算机 与通信学院 ,湖南 株洲 4 2 0 1 0 8)
摘 要 :基 于 L c n u e. e实现 了一 个海量数 据库全 文检 索的原 型。把 关系数 据库 引入 了本 系统 ,可针 对不 同类型 的源数据 库灵 活配 置 , 比采 用 配置文件 更加 灵活 ;采 用 多线程 ,通过 动 态机 制 来 实现 不 同类 型 源数 据库 中记 录 的抽 取 、转换 、建立 索 引;提 供 定 时 自动 更新 索 引的功 能 ;提供 多种检 索方 式。 关键 词 :L c n ;关 系数据 库 ;全文检 索 u ee 中图分类号 : P 9 T 31 文献标志码 : A 文章编号 : 6 3 93 (0 1 2 0 8 —4 17 — 832 1) — 0 10 0
第2 卷 第 2 5 期
21 年 3 01 月


l I
业大学Fra bibliotek学报
Vo- l25No. 2 M a . 201 r l
J r l u anU n v r i ofTec ol y ou na H n i e st of y hn og
基于 L cn u e e的海量数据库全 文检 索的设计与实现
0 引 言
随着互联 网的飞速 发展 ,数 据量 与 日俱增 ,越
国内外 相继 出现 了一 些全 文检 索产 品 ,国 内比 较有 代表性 的如 易宝北 信信 息技 术有 限公 司设 计 和 开发 的全 文信息检索 和管理 系统 T S等 ,而 国外 比 R 较 著名的有 I M 公司研发 的关 系型数据库 DB 其 中 B 2 的 T x E t dr O al公 司的 O al T x, c sf et xe e, rc n e rc et Mi oot e r 公 司开发 的 s L S re Q ev r和开源 的 L c n … u e e 全文检索 工具 包 。利用 大型关 系数 据库 本身 提供 的检索服 务 还有较多不足 ,所 以不适合作 为开发平台。而 L cn ue e

基于Lucene的全文检索构件的研究与实现

基于Lucene的全文检索构件的研究与实现

开发工具包 , 而不是一 个具备完整特性 的应 用程序。所 以, 用 使
0 引 言
随着信息 时代 的来 临 , 人们 每天都要面对海量 的数字信息 。 为 了帮助人们 在海量信息 中快速 找到有 价值 的信 息 , 来越 多 越 的软件系统提供全 文检索功能 。 为 了给软件 系统添加全 文检 索功能 , 件开发 人员 需要 对 软 全文检索 的工作原理 、 实现作深入 研究 , 这是 一个费时费力 的过 程 。尤其对于 已经 开发 好 的系统 , 添加 新 的功能会 导致 对原有 系统 的修改 , 增加不稳定 的 因素。如果 有一 套完整 的全 文检 索
构件 , 能够根 据用 户 的需要 实 现全 文检 索 , 让用 户 的投 入最 而
L cn uee构件全文检 索需 要在它 的基础上做 二次开发 。 L cn 可 以对 任何 的 文本 数据 做 索引 和 搜索 。它不 管 数 ue e 据是什么格式 , 只要 能转 化 成文 本 , 都能 处理 j 它 。许 多项 目 都使 用 了 L cn u ee作 为其 后 台的 全文 检索 引 擎 , 比较 著名 的 有
第2 7卷 第 2期
21 0 0年 2月
计 算机 应 用与 软件
Co utrAp i ai n n fwa e mp e pl to s a d Sot r c
Vo. 7 No 2 12 .
Fe 2 0 b. 01
基 于 L cn u e e的全 文检 索构 件 的研 究 与 实现
s s o h r h tcu e o u e e a d t e d fc so u e s Si d xn ,a d t e a e o h t l tx ere a o o e t s d sg e n e n t e a c i t r f c n n ee t f c n e’ n e i g n h n b s n t a f l e trt v l mp n n e i n d a d e L h L au — i c i

搜索引擎之全文搜索算法功能实现(基于Lucene)

搜索引擎之全文搜索算法功能实现(基于Lucene)

搜索引擎之全⽂搜索算法功能实现(基于Lucene)之前做的时候,我已经公开了⾮全⽂搜索的代码,需要的朋友希望能够前去阅读我的博客。

本⽂主要讨论如何进⾏全⽂搜索,由于本⼈花了很长时间设计了新作:,观点对全⽂搜索的要求还是很⾼的,所以我⼜花了不少时间研究全⽂搜索,你可以先体验下:。

废话也不多说了,直接上代码:public Map<String,Object> articleSearchAlgorithms(SearchCondition condition,IndexSearcher searcher) throws ParseException, IOException{Map<String,Object> map =new HashMap<String,Object>();String[] filedsList=condition.getFiledsList();String keyWord=condition.getKeyWord();int currentPage=condition.getCurrentPage();int pageSize=condition.getPageSize();String sortField=condition.getSortField();boolean isASC=condition.isDESC();String sDate=condition.getsDate();String eDate=condition.geteDate();String classify=condition.getClassify();//过滤终结字符keyWord=escapeExprSpecialWord(keyWord);BooleanQuery q1 = new BooleanQuery();BooleanQuery q2 = new BooleanQuery();BooleanQuery booleanQuery = new BooleanQuery(); //boolean查询if(classify!=null&&(classify.equals("guanzhi")||classify.equals("opinion")||classify.equals("write"))){String typeId="1";//默认⾔论if(classify.equals("guanzhi")){typeId="2";}if(classify.equals("opinion")){typeId="3";}Query termQuery = new TermQuery(new Term("typeId",typeId));q1.add(termQuery,BooleanClause.Occur.MUST);}if(sDate!=null&&eDate!=null){//是否范围查询由这两个参数决定Query rangeQuery = new TermRangeQuery("writingTime", new BytesRef(sDate), new BytesRef(eDate),true, true);q1.add(rangeQuery,BooleanClause.Occur.MUST);}Sort sort = new Sort(); // 排序sort.setSort(SortField.FIELD_SCORE);if(sortField!=null){sort.setSort(new SortField(sortField, SortField.Type.STRING, isASC));}int start = (currentPage - 1) * pageSize;int hm = start + pageSize;TopFieldCollector res = TopFieldCollector.create(sort,hm,false, false, false, false);//完全匹配查询Term t0=new Term(filedsList[1],keyWord);TermQuery termQuery = new TermQuery(t0);//两种⾼度匹配的查询q2.add(termQuery,BooleanClause.Occur.SHOULD);//前缀匹配Term t1=new Term(filedsList[1],keyWord);PrefixQuery prefixQuery=new PrefixQuery(t1);q2.add(prefixQuery,BooleanClause.Occur.SHOULD);//短语,相似度匹配,适⽤于分词的内容for(int i=0;i<filedsList.length;i++){ //多字段term查询算法if(i!=1){PhraseQuery phraseQuery=new PhraseQuery();Term ts0=new Term(filedsList[i],keyWord);phraseQuery.add(ts0);FuzzyQuery fQuery=new FuzzyQuery(new Term(filedsList[i],keyWord),2);//最后相似度查询q2.add(phraseQuery,BooleanClause.Occur.SHOULD);q2.add(fQuery,BooleanClause.Occur.SHOULD);//后缀相似的拿出来}}MultiFieldQueryParser queryParser = new MultiFieldQueryParser(Version.LUCENE_47,filedsList,analyzer);queryParser.setDefaultOperator(QueryParser.AND_OPERATOR);Query query = queryParser.parse(keyWord);q2.add(query,BooleanClause.Occur.SHOULD);//必须加逻辑判断,否则结果是不同的if(q1!=null && q1.toString().length()>0){booleanQuery.add(q1,BooleanClause.Occur.MUST);}if(q2!=null && q2.toString().length()>0){booleanQuery.add(q2,BooleanClause.Occur.MUST);}searcher.search(booleanQuery, res);long amount = res.getTotalHits();TopDocs tds = res.topDocs(start, pageSize);map.put("amount",amount);map.put("tds",tds);map.put("query",booleanQuery);return map;}注意下:上⾯代码的搜索条件(SearchCondition )是的具体需求,您可以按照您⾃⼰的搜索条件做改动,这⾥也很难适配所有读者。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

科技情报开发与经济文章编号:1005-6033(2005)15-0242-03SCI/TECHINFORMATIONDEVELOPMENT&ECONOMY2005年第15卷第15期收稿日期:2005-06-03基于Lucene的网站全文搜索的设计与实现陈庆伟1,刘军2(1.山西省网络管理中心,山西太原,030001;2.山西省科技情报研究所,山西太原,030001)摘要:Lucene是一个基于Java技术的开放源代码全文索引引擎工具包,它可以方便地嵌入到各种应用中实现针对应用的全文索引/检索功能。

利用Lucene的API可以比较方便地为一个网站提供全文搜索功能。

探讨了如何使用Lucene建造一个通用的Web站点全文搜索工具,并对在构建系统中应注意的若干问题进行了探讨。

关键词:全文搜索;Lucene;Java中图分类号:TP393.07文献标识码:A在构建一个信息类Web站点的时候,站点的全文搜索功能是必备的功能之一。

一般站点的信息内容都存储在各种数据库系统中,并使用数据库提供的检索和查询功能构建网站的搜索功能。

但随着信息的累‘%keyword%’查询构成的数据检索性能将积,使用数据库中的类似like急剧下降,因此,只使用数据库查询进行全文检索并不是一个好的解决它可以方便方案。

Lucene是一个基于Java技术的全文索引引擎工具包,地嵌入到各种应用中实现针对应用的全文索引/检索功能。

例如Lucene可以快速实现一个简单、功能强大的数据全文检索系统。

PDFWordXSLT格式化各种输出TextXML输出XML格式XML中间格式DBLuceneDB1设计目标全文检索系统的主要功能就是为信息资料提供全文索引和查询。

对其他专业格式图1接口的实现示意图于一个以提供信息资料为主要目的网站来说,网站的全文检索系统是必备功能之一。

但对于小型的信息网站来说,购置全文检索系统的代价经‘keyword’查询来代替全文检索常是昂贵的。

如果只使用数据库的Like系统,其性能又往往达不到要求,甚至影响数据库的其他正常使用。

而使也会遇用其他大型搜索引擎的站内搜索(例如google提供的站内搜索)到更新慢、数据不准确、无法控制输出格式等情况。

那么能不能自己实现一个适用的全文搜索引擎呢?答案是肯定的。

这就是利用开放源代码的搜索引擎工具包Lucene来构成自己的全文搜索引擎,它富有弹性的软件架构可以使我们方便地对其功能进行扩充,以快速实现一个通用网站的全文搜索引擎。

这样一个通用的网站搜索引擎可以达到下面的设计目标:其一,为各种类型的原始文档提供一个适当的包装,以方便搜索引擎对其内容进行索引和存储,这些类型包括Database记录、文本文档、Word/Excel文档、PDF文档以及其他专用的格式文档。

其二,提供内容爬行程序以便可以对不同来源的内容进行索引,其Web页面、文件系统等。

主要的数据来源包括数据库表、其三,提供一个统一的中间输出格式以便对检索结果进行不同的处理和显示。

其四,提供相关词检索,方便用户更有效地查询信息。

从原始文档提取这些属性作为索引文档的共同属性。

2.2系统结构根据上面所讨论的系统设计目标,一个通用的网站全文搜索引擎的整个系统由5个大的模块构成:结构如图2所示,文档抽取模块WordXLMPDFTest文档过滤模块中文分词关键字过滤噪音词过滤系统配置管理文档处理流水线文档适配器数据源爬行器标准数据交换层22.1系统实现接口设计从上面的设计目标我们可以看到,系统的数据来源是多样的,同时索引模块全文检索核心引擎多引擎处理模块LuceneAPILuceneAPI查询模块输出模块XML格式数据XSLT引擎其输出形式也是多样的。

这使我们很容易想到使用XML作为数据的中间格式:所有来自数据源爬行程序的数据转化为XML格式的中间数据,这些中间数据进行进一步的格式化,产生更一致的XML数据结构(例如title和subject元素都统一描述为title,作为文档的标题),最后,这些XML数据进入Lucene引擎进行索引;而数据的输出则可以通过对XML数据的不同格式化处理而实现。

接口的实现如图1所示。

其中,右边的文档属性列表是每个索引文档统一的属性,应该尽量LuceneDBLuceneDB图2通用网站全文搜索引擎结构示意图一是多引擎处理模块。

核心引擎的主要工作是管理文档全文索引数242陈庆伟,刘军基于Lucene的网站全文搜索的设计与实现本刊E-mail\bjb@mail.sxinfo.net信息技术据的处理,它由一个多引擎处理模块作为控制的中心,使得引擎可以同时处理多个不同的索引数据库。

二是文档抽取模块。

它由处理不同类型文档的文档适配器和一个数据源爬行管理器组成,它的主要工作根据配置文件定时产生数据源爬行器以遍历整个数据源,并使用相应的文档适配器对文档内容进行抽取。

三是文档处理模块。

它由一系列文档处理程序模块构成,它们可以在配置管理模块的操纵下挂接在文档处理流水线上。

它可以四是输出模块。

它由一些XSLT模块和一个XSLT引擎构成,对核心引擎产生的结果进行不同的格式化处理,以适应不同外围系统的需要。

五是系统配置模块。

它可以管理系统的配置资源,并可以根据配置的变更动态地更新不同的系统参数配置。

果对全文检索做排序,其性能不能得到保证。

而在索引中,除了匹配度score外,唯一能用来排序的就是索引记录的Id,所以一个比较高效实现定制排序的方法是:在索引时让进入Lucene全文的顺序对应着一定规则,比如时间顺序。

而在搜索时,让搜索结果按照索引记录的Id进行排序(或倒排),这样就避免了在Lucene搜索结果外对结果再次进行排序和在搜索过程中访问不在索引中的某个字段值。

这可以通过修改IndexSearcher中的HitCollector方法来实现:scorer.score(newHitCollector(){privatefloatminScore=0.0f;publicfinalvoidcollect(intdoc,floatscore){if(score>0.0f&&(bits==null||bits.get(doc))){//skipdocsnotinbits[0]++;totalHitsif(score>=minScore){//hq.put(newScoreDoc(doc,score));以前使用score排序hq.put(newScoreDoc(doc,(float)1/doc));//现在使用doc的逆排序if(hq.size()>nDocs){//ifhitqueueoverfull();//removelowestinhitqueuehq.pop(ScoreDoc)hq.top()).score;//resetminScoreminScore=(}}}}reader.maxDoc()},3.3索引优化索引一般分两种情况,一种是小批量的索引扩展,一种是大批量的索引重建。

对于一般的信息类网站来说,由于其内容并不多(<10Gb),因此建议定期对所有文档进行大批量的索引重建。

在索引过程中,并不是每次新的文档对象加入进去索引都重新进行并根据一一次索引文件的写入操作。

Lucene先在内存中进行索引操作,定的批量进行文件的写入。

这个批次的间隔越大,文件的写入次数越少,索引速度会但占用内存将增加;反之占用内存少,但文件IO操作频繁,很慢。

在IndexWriter中有一个Merge_Factor参数可以调整文档的批量大小,可以根据具体的系统配置决定该数值的大小。

该数值的缺省值为20,一般来说,在内存允许的情况下,该数值越大索引速度越快。

3.4搜索过程优化根据对数据引擎的使用经验看来:头100条已经可以满足95%以上的模糊检索需求。

Lucene面向全文检索的优化在于首次索引检索后,并不把所有的记录(Document)具体内容读取出来,而起只将所有结果中因此,结匹配度最高的头100条结果的文档Id放到结果缓存中并返回,果集占用的内存空间很少。

如果首批缓存结果数用完后还要读取更后面的结果时Searcher会再次检索并生成一个比上次的搜索缓存大1倍的缓存,并再重新向后抓取结果。

所以,如果构造一个Searcher去检索101个结果,Searcher也需头100条取完后,缓存结果用完,Searcher重新要进行了2次搜索过程:检索再构造一个200条的结果缓存,依此类推。

由于每次Searcher对象消失后,这些缓存也访问不到那了,因此,对于一个访问量比较大的网站来说应该使用另外的缓存技术以减少实际的数据检索技术。

我们建议的缓存技术应实现下面3点要求:其一,对于任意查询,缓存用户的每一次检索结果集合,这个集合最大容纳200条匹配文档,同时根据时间优先的原则保存10min。

实现这一点,基本可以保证某用户对结果集合进行浏览的时候引擎不再重新检索内容。

其二,对于任意查询,缓存结果的时间和检索结果集合的大小相关,结果集合越大,缓存的时间越短。

因为根据我们的统计,对于结果集合过大的检索,用户倾向于使用更多的关键字对数据进行再次检索。

其三,对于热门关键字的检索,建立一个更加长效的缓存(保存24h或直到网站有了新的内容更新)来存储用户的查询,这对于提供某些专业类信息的站点来说可以极大地减少重新检索的次数。

33.1关键点探讨中文分词对于中文来说,全文索引首先要解决一个语言分析的问题,对于拉丁语来说,语句中单词之间是天然通过空格分开的,但中文字词是连续的,如何在这些由连续汉字组成的语句中把一个具有独立意义的词汇切分出来就是一个很大的问题。

从自然语言处理的角度看,切分出来词汇应该是具有自然语言词汇特征的词汇,这样的分词实际上是一种根据词汇表对语句进行切分的方法,即词表分词。

但即使有词汇表,这样的切分仍然是困难的。

最常见的示例是对“中华人民共和国”这个词汇进行切分处理,从自然语言的角度看,这是一个具有独立意义的完整的词汇,但其中的“华人”在汉语中也是一个具有独立意义的词汇。

因此,对于汉字从自然语言概念上的进行切分,如何适当的分词是一个比较复杂的任务。

幸运的是,对于构建一个简单的全文搜索引擎来说,我们还可以使用另外一种简化的处理方式,即采用自动切分算法。

自动分词可以按照单个字符作为索引单元,也可以将单词按照每两个字符构成一个词汇的两元语法方式切分出来。

例如可用以下方法对“全文检索”进行分词:一是一元切分:“全”“文”“检”“索”。

二是两元切分:“全文”“文检”“检索”。

基于自动切分的最大优点是没有词表维护成本,实现简单,缺点是索引准确程度稍低,但对于中小型应用来说,自动切分准确性还是够用的。

基于两元切分后的索引一般大小和源文件差不多,而对于英文和一元切分,索引文件一般只有原文件的30%到50%。

相关文档
最新文档