开放源代码的全文检索引擎Lucene_2

合集下载

Lucene简介(共36张)

Lucene简介(共36张)

不做索引,用于存放不搜索的内容
Index.TOKENIZED 分词索引,用于存放可搜索的内容
Index.UM_TOKENIZED
不分词索引,用于存放ID
18
第18页,共36页。
Field示例(shìlì)
public static Document getDocument(Info info){ Document document = new Document(); Field field = null;
分词组件(Tokenizer)
1、将文档分成一个一个单独的单词。 2、去除标点符号。 3、去除停词(Stop word)。
词元(Token) 经过分词(Tokenizer)后得到的结果称为词元(Token)
倒排(Posting List)链表 1、Document Frequency 即文档频次,表示总共有多少文件包含此词(Term)。 2、Frequency 即词频率,表示此文件中包含了几个此词(Term)。
一个高效的,可扩展的,全文检索库。 全部用Java实现,无须配置 。
仅支持纯文本文件的索引(Indexing)和搜索(Search)。 不负责由其他格式的文件抽取纯文本文件,或从网络中抓取文件的过
程.
Mr. Ajax
8 第8页,共36页。
Lucene的总体(zǒngtǐ)架构
9 第9页,共36页。
4、域(Field):
a、一篇文档包含不同类型的信息,可以分开索引,比如标题,时间,正文,作者 等,都可以保存在不同的域里。 b、不同域的索引方式可以不同
5、词(Term):
词是索引的最小单位,是经过词法分析和语言处理后的字符串。
16àn):Lucene

ApacheLucene(全文检索引擎)—分词器

ApacheLucene(全文检索引擎)—分词器

ApacheLucene(全⽂检索引擎)—分词器⽬录1.分词器的作⽤ a. 在创建索引的时候需要⽤到分词器,在使⽤字符串搜索的时候也会⽤到分词器,并且这两个地⽅要使⽤同⼀个分词器,否则可能会搜索不出来结果。

b. 分词器(Analyzer)的作⽤是把⼀段⽂本中的词按规则取出所包含的所有词,对应的是Analyzer类,这是⼀个抽象类(public abstract class org.apache.lucene.analysis.Analyzer),切分词的具体规则是由⼦类实现的,所以对于不同的语⾔规则,要有不同的分词器。

2.英⽂分词器的原理 a.英⽂的处理流程为:输⼊⽂本,词汇切分,词汇过滤(去除停⽤词),词⼲提取(形态还原)、⼤写转⼩写,结果输出。

b. 何为形态还原,意思是:去除单词词尾的形态变化,将其还原为词的原形,这样做可以搜索出更多有意义的结果,⽐如在搜索student的时候,同事也可以搜索出students的结果。

c. 任何⼀个分词法对英⽂的⽀持都是还可以的。

3.中⽂分词器的原理 a.中⽂分词⽐较复杂,并没有英⽂分词那么简单,这主要是因为中⽂的词与词之间并不是像英⽂那样⽤空格来隔开,因为不是⼀个字就是⼀个词,⽽且⼀个词在另外⼀个地⽅就可能不是⼀个词,如:"我们是中国⼈","是中"就不是⼀个词,对于中⽂分词,通常有三种⽅式:单字分词、⼆分法分词、词典分词。

a.1 单字分词:就是按照中⽂⼀个字⼀个字的进⾏分词,⽐如:"我们是中国⼈",分词的效果就是"我","们","是","中","国","⼈",StandardAnalyzer分词法就是单字分词。

a.2 ⼆分法分词:按照两个字进⾏切分,⽐如:"我们是中国⼈",分词的效果就是:"我们","们是","是中","中国","国⼈",CJKAnalyzer分词法就是⼆分法分词 a.3 词库分词:按照某种算法构造词,然后去匹配已建好的词库集合,如果匹配到就切分出来成为词语,通常词库分词被认为是最好的中⽂分词算法,如:"我们是中国⼈",分词的效果就是:"我们","中国⼈",极易分词MMAnalyzer、庖丁分词、IkAnalyzer等分词法就是属于词库分词。

es的lucene作用

es的lucene作用

es的lucene作用Es的Lucene作用Lucene是一个开源的全文搜索引擎库,被广泛应用于各种编程语言和领域,其中包括Elasticsearch(简称Es),是一个基于Lucene 构建的分布式搜索与分析引擎。

本文将重点介绍Es的Lucene作用,并探讨其在搜索引擎领域中的重要性。

一、Lucene的基本概念和原理Lucene是一个高效、可扩展的全文搜索引擎库,它提供了一套简单而强大的API,可以用于创建索引、搜索和生成文本摘要。

其核心原理是将文本数据分析、索引和搜索的过程进行分离,以实现高效的全文搜索。

1. 数据分析(Analysis):Lucene提供了一系列的文本分析器(Analyzer),用于将输入的文本进行分词、词干提取、大小写转换等处理。

分析器的作用是将原始文本转化为一组有意义的词条(Term),以便于后续的索引和搜索操作。

2. 索引(Indexing):Lucene使用倒排索引(Inverted Index)的方式来存储和管理文本数据。

倒排索引是一种将词条映射到文档的数据结构,它可以快速地根据词条进行搜索,并找到包含该词条的文档。

3. 搜索(Searching):Lucene提供了丰富的搜索API,可以根据关键词、短语、通配符等进行检索,并按照相关度对搜索结果进行排序。

搜索过程利用倒排索引来定位匹配的文档,并根据各种算法计算文档与查询的相关度。

二、Es中的Lucene应用Es是一个基于Lucene的分布式搜索与分析引擎,它在Lucene的基础上进行了功能扩展和性能优化,提供了更强大的分布式搜索和数据分析能力。

1. 分布式搜索:Es将数据分片存储在多个节点上,并使用分布式索引的方式来实现高性能的搜索。

当用户发起搜索请求时,Es会将查询分发到各个节点,并将结果进行合并和排序,最后返回给用户。

2. 数据分析与聚合:Es提供了丰富的数据聚合功能,可以对文档进行分组、统计、排序等操作。

用户可以通过聚合操作获取关于数据的各种统计信息,如平均值、最大值、最小值等,以及根据条件进行数据筛选和分析。

lucene基础学习

lucene基础学习

搜索引擎Lucene第一章Lucene简介Lucene是apache软件基金会jakarta项目组的一个子项目,是一个开放源代码[的全文检索引擎工具包,即它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎(英文与德文两种西方语言)。

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

第二章lucene索引的建立的五个基础类索引的建立,Lucene 提供了五个基础类,分别是Document, Field, IndexWriter, Analyzer, Directory。

以下是他们的用途:DocumentDocument的含义为文档,在Lucene中,它代表一种逻辑文件。

Lucene本身无法对物理文件建立索引,而只能识别并处理Document的类型文件。

Lucene从Document取出相关的数据源并根据属性配置进行相应的处理。

Field对象是用来描述一个文档的某个属性的lucene中的field也具有一些特定的类型如在中,Field内部包含两个静态的内部类分别是Store和Index详细的描述了Field的属性,它们分别表示Field的储存方式和索引方式。

Store类有3个公有的静态属性::表示该Field不需要储存。

:表示该Field需要储存。

:表示使用压缩方式来保存这个Field的值。

Index有4个公有的静态属性::表示该Field不需要索引,也就是用户不需要去查找该Field的值。

:表示该Field先被分词再被索引。

TOKENIZED:表示不对该Field进行分词,但是要对他进行索引,也就是该Field会被用户查找。

:表示对该Field进行索引,但是不使用Analyzer,同时禁止它参加评分,主要是为了减少内存的消耗。

Analyzer在一个文档被索引之前,首先需要对文档内容进行分词处理,这部分工作就是由Analyzer 来做的。

Lucene(一)

Lucene(一)

WebDB分析 WebDB分析 下面看看链接,执行命令: 下面看看链接,执行命令: bin/nutch readdb crawl生成结果: crawl-tinysite/db -dumplinks 生成结果: from http://keaton/tinysite/B.html to http://keaton/tinysite/A.html http://keaton/tinysite/Cto http://keaton/tinysite/Cduplicate.html to http://keaton/tinysite/C.html from http://keaton/tinysite/A.html to http://keaton/tinysite/B.html
Segment
Segment 是 网页 的集合,并且它被 索引。 Segment 的 Fetchlist 是抓取程序 使用的 url 列表 , 它是从 WebDB中生成 的。Fetcher 的输出数据是从 fetchlist 中 抓取的网页。Fetcher 的输出数据先被反 向索引,然后索引后的结果被存储在 segment 中。 Segment 的生命周期是有限 制的,当下一轮抓取开始后它就没有用 了。
10合并多个索引到一个大索引,为搜索提供索引库(merge)。
说明
上面第 8 步中每个 segment 的索引都是单独建 立的,之后才消重(第9步)。第10步就是大 功告成,合并单独的索引到一个大索引库。 Dedup 工具可以从 segment 的索引中去除重 复的url。因为 WebDB 中不允许重复的url , 也就是说 fetchlist 中不会有重复的url,所以不需 要对 fetchlist 执行 dedup 操作。 默认的抓取周期是30天,如果已经生成的旧 fetch 没有删除,而又生成了新的fetch 这是还是会 出现重复的url的。当只有一个抓取程序运行的时 候是不会发生上述情况的。

搜索引擎之全文搜索算法功能实现(基于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 )是的具体需求,您可以按照您⾃⼰的搜索条件做改动,这⾥也很难适配所有读者。

Lucene全文检索引擎的结构机制与应用方式

引( erh 。索 引创建 是将 现 实世 界 中所 有 的结 构 S ac )
成部 分设 计 为抽 象 类 , 体 的 平 台实 现 部 分 设计 为 具 抽象 类 的实 现 , 外 与具体 平 台相关 的部 分 , 此 比如文
件存 储也 封装 为类 , 过层 层 的面 向对象 式 的处理 , 经
o u lt x e re a s pr s n e . ff l— e tr t i v li e e t d Ke r s:f l e t r t i v l Lu e y wo d u lt x e re a , c ne,i e ng, e r h nd xi sac
李 明 宙 , 艳 , 宗义 罗 王
LIM i — h u, ng z o LU o n,W A N G o — i Ya Zh ng y
( 宁海 蓝数据 有 限公 司 , 西南 宁 5 0 2 ) 南 广 3 0 2
( g l n g t l c n l g NC. Na n n Gu n x , 3 0 2 Ch n ) Hi h a d Di ia Te h o o y I , n i g, a g i 5 0 2 , i a
全 文检 索 ( ul e tS ac ) F ltx erh 是计算 机 索 引程序 —
无关 的索引 文件 格 式 , 次 通 过抽 象 系统 的核 心组 其
通 过 扫描文件 中的 每一 个 词 , 每 一 个 词 建 立 一个 对 索引 , 明该 词在 文章 中 出现 的次数 和位 置 , 指 当用户 查询时, 检索 程序 就根 据事 先建 立 的索引 进行 查找 , 并 将查 找 的结 果反 馈 给用户 的检 索方 式L 。全 文检 1 ] 索 大体 分两 个 过 程 : 引创 建 (n e ig 和 搜 索 索 索 Id xn )

用JSP调用Lucene包来实现全文检索-精品文档资料

用JSP调用Lucene包来实现全文检索1 Tomcat+JSP+Lvcene1. 1 Tomcat的Web服务器Web服务器是在网络中为实现信息发布、资料查询、数据处理等诸多应用搭建基本平台的服务器。

Tomcat Server 是根据Servlet 和JSP 规范进行执行的,是一个十分有用的网络应用开发服务平台。

它的下载、安装、使用见网站:http :///1. 2 JSP(Java Server Pages)JSP(Java Server Pages) 是由Sun Microsystems 公司倡导、许多公司参与一起建立的一种动态网页技术标准。

JSP技术是用JAVA语言作为脚本语言的,JSP网页为整个服务器端的JAVA库单元提供了一个接口来服务于HTTP的应用程序。

中加入Java 程序在传统的网页HTML文件(*.htm,*.html)片段(Scriptiet) 和JSP标记(tag),就构成了JSP 网页(*.jsp)。

Web服务器在遇到访问JSP网页的请求时,首先执行其中的程序片段,然后将执行结果以HTM1格式返回给客户。

1. 3 LuceneLucene是Apache的开源项目,是用Java写的全文索引弓擎工具包。

它提供了许多简单实用的API,用这些API,就可以方便的嵌入到各种应用中,对任何基于文本的数据进行全文检Lucene 是用 Java 写的, 它的运行、 调试都需要有 JavaSDK 。

Lucene 的下载、安装、使用见网站: http :///2 全文检索的实现2.1 全文检索系统的结构全文检索系统是按照全文检索理论建立起来的用于提供全 文检索服务的软件系统。

一般来说, 全文检索需要具备建立索引 和提供查询的基本功能, 此外现代的全文检索系统还需要具有方 便的用户接口、面向 wwW 勺开发接口、二次应用开发接口等等。

结构上,全文检索系统核心具有索引引擎、查询引擎、文本分析 引擎、对外接口等等, 加上各种外围应用系统等共同构成了全文 检索系统。

lucene用法

lucene用法
Lucene是一个开源的全文搜索引擎库,具有高效、快速、易用等特点,目前被广泛应用于企业信息检索、电子商务、新闻网站等领域。

Lucene的使用方法主要分为以下几个步骤:
1. 创建索引
在使用Lucene进行搜索之前,需要先创建索引。

索引是一种用于快速查找数据的数据结构,它记录了文档中每个单词出现的位置及其他相关信息。

创建索引的过程一般包括以下步骤:
a. 创建一个空的索引目录
b. 读取文档内容,把文档转换为一系列词语
c. 对每个词语进行分析和处理,包括分词、去除停用词、转换大小写等操作
d. 把每个词语的信息加入到索引中
2. 进行搜索
当索引创建完成后,就可以使用Lucene进行搜索了。

搜索的过程一般包括以下步骤:
b. 输入搜索关键词,对关键词进行分析和处理
c. 在索引中查找包含关键词的文档
d. 对搜索结果进行排序和过滤,返回最终结果
在实际应用中,Lucene可以用于以下场景:
a. 企业内部信息检索:对企业级别的大量数据进行搜索和查询,包括文档、邮件、图片、视频等各种数据类型。

b. 电子商务:对商品信息进行搜索和查询,包括商品名称、描述、价格等关键信息。

c. 新闻网站:对新闻文章进行搜索和查询,包括标题、正文、时间等关键信息。

总之,Lucene是一种非常强大的全文搜索引擎库,使用它可以快速高效地完成各种搜索和查询操作。

无论是企业内部、电子商务、新闻网站还是社交网络等领域都可以使用Lucene实现高效的全文搜索。

基于Lucene的全文搜索引擎设计

基于Lucene的搜索引擎作者姓名:王旭专业班级:2010050704 指导教师:涂德志摘要从1994年至今,万维网经过了二十年的飞速发展,当前的万维网数据规模到底有多大无从估量。

随着网络信息资源的急剧增长,现如今,信息已经不再是一种稀缺的资源,我们的注意力反而变得稀缺了。

人们越来越多地关注如何快速有效地从海量的网络信息中,抽取出潜在的、有价值的信息,使之有效地在管理和决策中发挥作用。

搜索引擎提供了一种便捷的获取网络信息的途径,只要你能在电脑上打字,那么你就能通过“输入关键字+自行浏览”的用户交互方式快速查找到自己感兴趣的资源。

目前Web搜索引擎(SearchEngine) 技术正成为计算机科学界和信息产业界争相研究、开发的对象。

搜索引擎是指互联网上一种提供用户查询的一类应用。

通过人工目录整理或者是网络爬虫收集互联网上已经存在的网页,在用户输入查询词后,将相关网页迅速展现给用户。

用户自行浏览后选择最合适期望的链接,进入查看。

关键词:网络信息资源 Web搜索引擎查询ABSTRACTSince 1994, the World Wide Webaftertwo decades ofrapid development, how muchthe currentsize ofthe World Wide Webisincalculable. With the rapid growth of network information resources, nowadays, the information is no longera scarce resource, however,our attention becamescarce.more and more concerned about howquickly and efficiently from the vast amounts of network information, to extract potentially valuable information to effectively play a role in the management and decision-making. Search engines provide a convenient way to obtain network information, as long as you can type on a computer, then you can through the mode: "keywords + browse" ,to quickly find the resources you are interested. Currently Web search engine (Search Engine) technology is becoming the target computer science and information industry compete on development.Search engine on the Internet refers to a method of providing a user queries a class of applications. Sorting through artificial catalog or web crawlers to collect Web pages on the Internet already exist, after the user enters the query words, the relevant pages quickly presented to the user. Choose the most appropriate link , browse the desired postinto view.Keywords:Network Information Resources Web Search Engine Consult目录第1章前言 (1)1.1 搜索引擎的学术背景与实际意义 (1)1.2 国内外文献综述 (2)1.3 课题来源及主要研究内容 (2)第2章相关技术介绍 (4)2.1 JSP与Tomcat (4)2.2 SQL Sever数据库 (4)2.3 Ajax简介 (5)2.4 Lucene介绍 (5)第3章搜索引擎原理 (8)3.1 搜索引擎体系结构 (8)3.2 搜索引擎主要模块功能介绍 (9)3.2.1 搜索器 (Crawler) (10)3.2.2 索引器 (Indexer) (11)3.2.3 检索器(Searcher) (12)3.2.4 用户接口((UserInterface) (12)第4章系统分析 (13)4.1 需求分析 (13)4.2 系统可行性分析 (14)4.2.1 社会可行性分析 (14)4.2.2 技术可行性分析 (14)4.2.3 经济可行性分析 (14)第5章总体设计 (15)5.1 系统构架 (15)5.1.1 索引建立子系统 (16)5.1.2 用户接口子系统 (17)5.2 数据库设计 (17)5.3 实现环境配置 (18)第6章详细设计 (19)6.1 建立索引 (19)6.2 文件搜索实现 (20)6.3 数据库搜索实现 (22)6.4 后台数据编辑实现 (23)第7章系统测试 (25)7.1 测试重要性 (25)7.2 测试用例 (26)结论 (28)致谢 (29)参考文献 (30)第1章前言1.1 搜索引擎的学术背景与实际意义万维网是互联网最主要的组成部分,也是人们获取网络信息的最主要的来源。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
索引中包含了各个项的位置信息。PhraseQuery利用这些信息去搜索文档, 索引中包含了各个项的位置信息。PhraseQuery利用这些信息去搜索文档, 在这些文档集中,我们所查找的各个项之间可能都相隔着一定的距离。 例如:假设某个域中包含了“ 例如:假设某个域中包含了“the quick brown fox jumped over the lazy dog”这个短语,即使我们不知道这个短语的确切完整写法,也一 dog” 样可以通过查找域中quick和fox距离相近的文档来找出我们需要的文 样可以通过查找域中quick和fox距离相近的文档来找出我们需要的文 档。 PhraseQuery phraseQuery =new PhraseQuery(); =new phraseQuery.setSlop(slop); for (int i = 0; i < key.length; i++) { phraseQuery.add(new phraseQuery.add(new Term("field",key[i])); } 默认情况下,PhraseQuery的slop因子设置为0 默认情况下,PhraseQuery的slop因子设置为0,即要求查询的结果必须 和我们需要的字符串组完全精确一致的匹配。
Query类的toString()方法 Query类的toString()方法
Query类中都包含有一个特殊的toString()方法。他 Query类中都包含有一个特殊的toString()方法。他 们输出QueryParser对象解析后的有效字符串。 们输出QueryParser对象解析后的有效字符串。 Object类的toString方法被重载为toString()以及 Object类的toString方法被重载为toString()以及 toString(String field)方法,括号中的field为默认 field)方法,括号中的field为默认 域的名称。无参数的toStirng()方法使用了一个空 域的名称。无参数的toStirng()方法使用了一个空 的默认域名,这就意味程序会明确的使用能够输 出全部所有项的域选择标识符。 toString()方法(特别是带字符串参数的方法)易于 toString()方法(特别是带字符串参数的方法)易于 我们可视化的调试使用构造方法创建的复杂查询, 同时也是打开QueryParser如何解析查询表达式之 同时也是打开QueryParser如何解析查询表达式之 门的一把钥匙。
new RangeQuery(Term startTerm, RangeQuery( Term endTerm, boolean inclusive) inclusive) QueryParser可以使用【 QueryParser可以使用【起始 TO 终止】表达式,或 终止】 者{起始 TO 终止}表达式来构造RangeQuery对象。 终止}表达式来构造RangeQuery对象。
北京普科优信科技公司
肖斌 E-MAIL:goldbin@
在程序代码中创建Query对象 对象 在程序代码中创建
Lucene的查询操作最终需要调用一个search方法,在该方法中 需要一个Query实例作为一个参数。可以通过QueryParser的 parser方法进行构造,也可以通过BooleanQuery,RangeQuery 以及TermQuery等它的子类来实现。
在程序代码中创建Query对象 对象 在程序代码中创建
2、在指定范围内搜索:RangeQuery 在指定范围内搜索:
索引中的各个项会以字典编录的顺序排列好,Lucene中的 索引中的各个项会以字典编录的顺序排列好,Lucene中的 RangeQuery类就为我们在指定起始项 RangeQuery类就为我们在指定起始项(starting Term) 类就为我们在指定起始项( Term) 和终止项( Term) 和终止项(ending Term)的范围内进行搜索提供了便 利。
4、SHOULD&MUST,SHOULD&MUST_NOT
SHOULD是一个比较特殊的约束。当它与MUST关联的时候,它失去意义。 SHOULD是一个比较特殊的约束。当它与MUST关联的时候,它失去意义。 检索的结果为MUST子句的检索结果。当它与MUST_NOT联用时, 检索的结果为MUST子句的检索结果。当它与MUST_NOT联用时, SHOULD的功能就与MUST一样,就变成MUST和MUST_NOT查询结果 SHOULD的功能就与MUST一样,就变成MUST和MUST_NOT查询结果 了。
Query query =new FuzzyQuery(new Term("content","lucen")); Hits hits =indexSearcher.search(query);
在程序代码中创建Query对象 对象 在程序代码中创建
6、通过短语搜索:PhraseQuery 通过短语搜索:
1、通过项进行搜索:TermQuery 、通过项进行搜索:
Term term =new Term("content","lucene"); Query query =new TermQuery(term); Hits hits =indexSearcher.search(query); 如果对多个域进行搜索,需要MultiFieldQueryParser 类似于: QueryParser queryParser =new QueryParser("content",new StandardAnalyzer()); Query query =queryParser.parse("lucene"); Hits hits =indexSearcher.search(query);
在程序代码中创建Query对象 对象 在程序代码中创建
4、组合查询:BooleanQuery 、组合查询:
通过使用BooleanQuery可以将各种查询类型组合成复杂的查询方式。 可以将各种查询类型组合成复杂的查询方式。 通过使用 可以将各种查询类型组合成复杂的查询方式 BooleanQuery本身是一个布尔字句的容器。这个字句可以是表示逻 本身是一个布尔字句的容器。 本身是一个布尔字句的容器 逻辑“ 或者逻辑“ 的一个子查询。 辑“或”、逻辑“与”或者逻辑“非”的一个子查询。 Term term =new Term("url","F:\\luceneT\\test1"); =new Term("url","F:\ luceneT\ Query query1 =new PrefixQuery(term); =new QueryParser queryParser =newQueryParser("content",new =newQueryParser("content",new StandardAnalyzer()); Query query2 =queryParser.parse("lucene"); BooleanQuery booleanQuery =new BooleanQuery(); =new booleanQuery.add(query1, BooleanClause.Occur.MUST); booleanQuery.add(query2, BooleanClause.Occur.MUST); Hits hits =indexSearcher.search(booleanQuery); MUST_NOT代表不符合查询条件。“ MUST_NOT代表不符合查询条件。“非” BooleanQuery对其中包含的子句的数量有限制,默认情况下最多是1024 BooleanQuery对其中包含的子句的数量有限制,默认情况下最多是1024 个。对此进行限制,适当的防止布尔查询对应用程序的性能造成影响。 当字句数量超过最大值时,和抛出ToomanyClauses的异常。 当字句数量超过最大值时,和抛出ToomanyClauses的异常。
对搜索结果进行排序

tinq
tf (tind ) idf (t ቤተ መጻሕፍቲ ባይዱ boost (t . fieldind ) lengthNorm (t . fieldind )
Lucene提供了一个Explanation对象来包含所有关于评分计算公式中各个因子的细 Lucene提供了一个Explanation对象来包含所有关于评分计算公式中各个因子的细 节信息。toString方法可以将Explanation对象很好的以文本的格式输出来。 节信息。toString方法可以将Explanation对象很好的以文本的格式输出来。 Explanation explanation =indexSearcher.explain(query, hits.id(i)); //hits.id(i) 表示排名第i的DocumentID; 表示排名第i DocumentID; System.out.println(explanation.toString()); //Explanation 类还有一个toHtml方法能够输出与之相同的层次结构,适合于在web 类还有一个toHtml方法能够输出与之相同的层次结构,适合于在web 浏览器中输出结果。 //tf (t in d) Term Frequency 也就是词条频率的意思。他表示检索的词条在某个文 档中出现的次数。 实际上,Explanation是Nutch项目的一个核心内容。通过Explanation对象可以方便 实际上,Explanation是Nutch项目的一个核心内容。通过Explanation对象可以方便 的看到评分计算的内部工作原理,但他需要的开销和做查询操作是一样的。因 此,不要过多的使用Explanation对象。 此,不要过多的使用Explanation对象。
相关文档
最新文档