lucene全文检索汇总

合集下载

基于Lucene的异构数据库全文检索技术

基于Lucene的异构数据库全文检索技术

基于Lucene的异构数据库全文检索技术王亮;苏云【摘要】Recently the army has accumulated massive operationaldata,equipment performance,naval battlefield environment etc.These huge data is with various formats,and stored in different types of database.How to retrieve the target information from these data rapidly and exactly is a very important work.Lucene is a Java-based open source library of full text search,and can be easily used to customize a search engine which can meet the specific needs of users.In this paper,we develop a configurable full-text search engine which can support different types of database.%当前,我军积累了部队情况、装备性能、海战场环境等海量的作战数据.这些数据数量巨大、格式多样,且存储在不同类型的数据库中.如何快速准确地从这些数据中检索出目标信息,成为一项非常重要的工作.Lueene是一个基于Java的开源的全文检索库,利用它可以方便地定制出符合用户特定需求的搜索引擎.使用Lueene可研制出一种可配置的、支持不同类型数据库的全文搜索引擎.【期刊名称】《指挥控制与仿真》【年(卷),期】2017(039)002【总页数】5页(P141-144,148)【关键词】Lucene;异构数据库;全文检索;搜索引擎;索引【作者】王亮;苏云【作者单位】海军指挥所,北京100841;江苏自动化研究所,江苏连云港222061【正文语种】中文【中图分类】TP391.3;E91随着现代互联网的快速发展,网络上存储的信息量越来越大且呈指数增长。

Lucene中文全文检索精品PPT课件

Lucene中文全文检索精品PPT课件
1、.Analysis:语言分析器,主要用于的切词, 支持中文主要是扩展此类。
2、.Document:索引存储时的文档结构管理, 类似于关系型数据库的表结构。
3、.Index:索引管理,包括索引建立、删除等 4、.QueryParser:查询分析器,实现查询关键词
Lucene(.net)全文检索
简介
Lucene不是一个完整的全文索引应用,而是一个用 Java写的全文索引引擎工具包,它可以方便的嵌入到 各种应用中实现针对应用的全文索引/检索功能。
是.net版
Lucene可以对任何的数据做索引和搜索. Lucene不管 数据源是什么格式,只要它能被转化为文字的形式,就可 以被Lucene所分析利用.也就是说不管是MS word, Html ,pdf还是其他什么形式的文件只要你可以从中抽 取出文字形式的内容就可以被Lucene所用.你就可以用 Lucene对它们进行索引以及搜索.
由此可以看出模糊查询相对数据库的精确查询是一个非 常不确定的问题,这也是大部分数据库对全文检索支持 有限的原因。Lucene最核心的特征是通过特殊的索引结 构实现了传统数据库不擅长的全文索引机制,并提供了 扩展接口,以方便针对不同应用的定制。
Lucene全文检索 VS. 数据库模糊查询
索引
匹配效果 匹配度 结果输出 可定制性
全文检索 ≠ like "%keyword%"
数据库索引不是为全文索引设计的,因此,使用like “%keyword%”时,数据库索引不起作用,使用like查询, 搜索过程是一个遍历过程,所以对于含有模糊查询的数据 库服务来说, like对性能的危害极大。如果对多个关键词 进行模糊匹配:like"%keyword1%" and like "%keyword2%" ...其效率也就可想而知了。

Lucne检索数据库支持中文检索

Lucne检索数据库支持中文检索

全文分两部分:一:Lucene简介Lucene版本:3.0.2全文检索大体分两个部分:索引创建(Indexing)和搜索索引(Search)1. 索引过程:1) 有一系列被索引文件(此处所指即数据库数据)2) 被索引文件经过语法分析和语言处理形成一系列词(Term)。

3) 经过索引创建形成词典和反向索引表。

4) 通过索引存储将索引写入硬盘。

2. 搜索过程:a) 用户输入查询语句。

b) 对查询语句经过语法分析和语言分析得到一系列词(Term)。

c) 通过语法分析得到一个查询树。

d) 通过索引存储将索引读入到内存。

e) 利用查询树搜索索引,从而得到每个词(Term)的文档链表,对文档链表进行交,差,并得到结果文档。

f) 将搜索到的结果文档对查询的相关性进行排序。

g) 返回查询结果给用户。

• 索引过程如下:◦创建一个IndexWriter用来写索引文件,它有几个参数,INDEX_DIR就是索引文件所存放的位置,Analyzer便是用来对文档进行词法分析和语言处理的。

◦创建一个Document代表我们要索引的文档。

◦将不同的Field加入到文档中。

我们知道,一篇文档有多种信息,如题目,作者,修改时间,内容等。

不同类型的信息用不同的Field来表示,在本例子中,一共有两类信息进行了索引,一个是文件路径,一个是文件内容。

其中FileReader的SRC_FILE就表示要索引的源文件。

◦IndexWriter调用函数addDocument将索引写到索引文件夹中。

• 搜索过程如下:◦IndexReader将磁盘上的索引信息读入到内存,INDEX_DIR就是索引文件存放的位置。

◦创建IndexSearcher准备进行搜索。

◦创建Analyer用来对查询语句进行词法分析和语言处理。

◦创建QueryParser用来对查询语句进行语法分析。

◦QueryParser调用parser进行语法分析,形成查询语法树,放到Query中。

lucene全文检索精华

lucene全文检索精华

lucene全文检索精华lucene全文检索1 概念全文检索(Full-Text Retrieval)是计算机程序通过扫描文章中的每一个词,对每一个词建立一个索引,指明该词在文章中出现的次数和位置。

当用户查询时根据建立的索引查找,类似于通过字典的检索字表查字的过程.1.1 lucene全文检索的特性全文检索(Full-Text Retrieval)是指以文本作为检索对象,找出含有指定词汇的文本。

全面、准确和快速是衡量全文检索系统的关键指标。

关于全文检索的特性,我们要知道:1,只处理文本。

2,不处理语义。

3,搜索时英文不区分大小写。

4,结果列表有相关度排序。

下图就是显示“1+1等于几”这个搜索要求对应的结果。

可以看到,是没有“2”这个结果的,结果页面都是出现了这些词的网页 .1.2 全文检索的应用场景我们使用Lucene,主要是做站内搜索,即对一个系统内的资源进行搜索。

如BBS、BLOG中的文章搜索,网上商店中的商品搜索等。

使用Lucene的项目有Eclipse、Jira等。

一般不做互联网中资源的搜索,因为不易获取与管理海量资源(专业搜索方向的公司除外)。

2 第一个lunece程序2.1 准备lucene的开发环境搭建Lucene的开发环境只需要加入Lucene的Jar包,要加入的jar包至少要有: ? lucene-core-4.4.0.jar(核心包)? analysis\\common\\lucene-analyzers-common-4.4.0.jar(分词器) ?highlighter\\lucene-highlighter-4.4.0.jar(高亮) ? \\memory\\lucene-memory-4.4.0.jar(高亮)? queryparser\\ lucene-queryparser-4.4.0.jar (查询解析)2.2 实现建立索引功能(IndexWriter)/*** 使用indexWriter对数据库建立索引.. * @throws IOException */ @Test public void createIndex() throws IOException{//索引存放的位置...Directory directory=FSDirectory.open(new File(\));//lucene当前使用的匹配版本Version matchVersion=Version.LUCENE_44;//分词器,对文本进行分词,抽象类,由子类实现不同的分词方式Analyzer analyzer=new StandardAnalyzer(matchVersion); //索引写入的配置 IndexWriterConfig indexWriterConfig=new//构建用于操作索引的类IndexWriter indexWriter=new IndexWriter(directory,IndexWriterConfig(matchVersion, analyzer);indexWriterConfig);//索引库里面的要遵守一定的结构,(索引结构...) 在索引库当中保存的都是documentDocument doc=new Document(); //索引document里面页游很多的字段... /** * 1:字段的名称 * 2:字段对应的值* 3:该字段在索引库中是否存储 */IndexableField id=new IntField(\, 1, Store.YES);//StringField不会根据分词器去拆分,只有后面的String全包括才能被搜索到IndexableField title=new StringField(\, \培训,传智播客//TextField如果按照默认分词器去拆分,中文则是按照单个中文拆分的专注Java培训10年\, Store.YES);IndexableField content=new TextField(\, \培训的龙头老大,口碑最好的java培训机构,进来看看同学们的呐喊\, Store.YES);doc.add(id);}doc.add(title); doc.add(content);indexWriter.addDocument(doc);indexWriter.close();2.3 实现搜索功能(IndexSearcher)/*** 使用indexSearcher对数据进行搜索 * @throws IOException */ @Testpublic void queryIndex() throws IOException{//索引存放的位置Directory directory=FSDirectory.open(new File(\)); //创建索引读取器IndexReader indexReader=DirectoryReader.open(directory);//通过indexSearcher去检索索引目录...IndexSearcher indexSearcher=new IndexSearcher(indexReader);//我们以后只要根据索引查找,整个过程肯定要分2次..//这是一个搜索条件..,通过定义条件来进行查找...(可以拿到编号,编号都放在了//term 我需要根据哪个字段进行检索,字段对应的值...//Query是抽象类,由子类去实现不同的查询规则Query query=new TermQuery(new Term(\, \));//搜索先搜索索引目录(第一次搜)..不会直接搜索到document(第二次搜) //找到符合query条件的前面N条记录...如果不加条件则会全部查询出来ScoreDoc数组中,遍历数组就获得了编号)TopDocs topDocs=indexSearcher.search(query, 10); System.out.println(\总记录数是:\+topDocs.totalHits);//返回结果的数组(得分文档)ScoreDoc[] scoreDocs=topDocs.scoreDocs; //返回一个击中..for(ScoreDoc scoreDoc:scoreDocs){int docID=scoreDoc.doc; //根据编号去击中对应的文档//lucene的索引库里有很多document,lucene为每个document定义一个编号,唯一标识(docId),是自增长的。

Lucene搜索方法总结

Lucene搜索方法总结

1.多字段搜索使用multifieldqueryparser可以指定多个搜索字段。

query query = multifieldqueryparser.parse(”name*”, new string[] { fieldname, fieldvalue }, analyzer);indexreader reader = indexreader.open(directory);indexsearcher searcher = new indexsearcher(reader);hits hits = searcher.search(query);2.多条件搜索除了使用queryparser.parse分解复杂的搜索语法外,还可以通过组合多个query来达到目的。

query query1 = new termquery(new term(fieldvalue,“name1′)); //词语搜索query query2 = new wildcardquery(new term(fieldname,“name*”)); //通配符//query query3 = new prefixquery(new term(fieldname,“name1′)); //字段搜索field:keyword,自动在结尾添加*//query query4 = new rangequery(new term(fieldnumber, numbertools.longtostring(11l)), new term(fieldnumber, numbertools.longtostring(13l)), true); //范围搜索//query query5 = new filteredquery(query, filter); //带过滤条件的搜索booleanquery query = new booleanquery();query.add(query1, booleanclause.occur.must);query.add(query2, booleanclause.occur.must);indexsearcher searcher = new indexsearcher(reader);hits hits = searcher.search(query);3.过滤使用filter对搜索结果进行过滤,可以获得更小范围内更精确的结果。

基于Lucene的电子文献全文检索系统的研究

基于Lucene的电子文献全文检索系统的研究

基于Lucene的电子文献全文检索系统的研究【摘要】:实现了中文单字切分模块,并在LuceneAPI基础上建立支持中英文混合检索的全文数据库。

在电子文献全文检索系统项目中作为全文检索工具。

中文全文数据库的主要性能和功能包括:支持中英文混合检索;可以不关机动态添加或删除一篇文档索引;采用多线程设计,能承受大量的访问请求;支持跨平台运行;提供命令行直接查询方式和基于WEB的查询方式;易学通用的检索表达式;系统可扩展性强。

【关键词】:中文信息处理;全文数据库;全文检索Lucene中国分类号:TP3 文献标识码:A 文章编号:1002-6908(2007)0220078-011.Lucene简介Lucene是一个信息检索的函数库(Library),利用它你可以为你的应用加上索引和搜索的功能。

Lucene的使用者不需要深入了解有关全文检索的知识,仅仅学会使用库中的一个类,你就为你的应用实现全文检索的功能。

Lucene可以对任何的数据做索引和搜索,不管是MS word、Html 、pdf还是其他什么形式的文件只要你可以从中抽取出文字形式的内容就可以被Lucene所用,你就可以用Lucene对它们进行索引以及搜索。

它不仅能用来构建具体的全文检索应用,而且可被集成到各种系统软件中构建Web 等多种应用。

例如,某些商业软件也采用了Lucene作为其内部全文检索子系统的核心。

2.Lucene检索原理Lucene的检索算法属于索引检索,即用空间来换取时间,对需要检索的文件、字符流进行全文索引,在检索的时候对索引进行快速的检索,得到检索位置,这个位置记录检索词出现的文件路径或者某个关键词。

在使用数据库的项目中,一般不使用数据库进行检索,其主要原因是数据库在非精确查询的时候使用查询语言”like%keyword%”,对数据库进行查询是对所有记录遍历,并对字段进行”%keyword%”匹配,在数据库的数据庞大以及某个字段存储的数据量庞大的时候,这种遍历是低效的,它需要对所有的记录进行匹配查询。

基于Lucene的全文检索系统的设计与实现

基于Lucene的全文检索系统的设计与实现

2、查询处理:当用户提交搜索请求时,系统会调用Lucene的查询API对索引 进行搜索。根据用户输入的关键词,系统会在索引中查找包含这些关键词的文 档,并按照相关度进行排序。
3、结果展示:将搜索结果以网页的形式呈现给用户,并在每个搜索结果中展 示关键词的高亮显示,方便用户快速找到感兴趣的内容。
为了提高搜索性能和用户体验,我们还采取了一些优化措施。例如,对索引进 行定期更新以保持最新数据;使用多线程查询以提高并发性能;对搜索结果进 行去重和限流以避免重复和过多结果展示等。
结论
本次演示对基于Lucene的全文检索系统进行了深入研究与开发。
随着信息技术的快速发展,人们对于快速、准确、全面的信息检索需求日益增 长。Lucene全文检索引擎作为开源界的一款强大工具,为各类用户提供了高 效、灵活的信息检索服务。本次演示将从Lucene全文检索引擎的应用研究与 实现两个方面展开讨论。
2、组件选择:全文检索系统需要选用合适的文本解析器、分词器、倒排索引 生成器、查询处理器等组件。这些组件的选择将直接影响到系统的性能和准确 性。
3、数据存储和处理流程:数据存储需要考虑到文本数据的存储格式、索引的 构建与存储方式以及数据的更新与维护等问题;处理流程则包括数据的预处理、 索引构建、查询处理和结果排序等环节。
文献综述
在全文检索系统领域,已经有很多研究者和企业进行了深入的研究和开发。传 统的全文检索系统多采用基于规则和词典的方法来提取关键词和建立索引,但 这种方法对于大规模、多语种和复杂文本的处理能力有限。随着人工智能技术 的发展,尤其是自然语言处理和机器学习领域的进步,越来越多的研究者将新 型技术应用于全文检索,取得了显著的成果。然而,现有的全文检索系统在处 理长文本、识别语义信息等方面仍存在一定局限性。

用lucene实现在一个(或者多个)字段中查找多个关键字

用lucene实现在一个(或者多个)字段中查找多个关键字

用lucene实现在一个(或者多个)字段中查找多个关键字最近跟着师兄们做个项目,我的任务就是负责做个“全文检索”的小模块。

用到了Lucene 的索引,下面的是其中的用Lucene实现在索引的一个字段(比如文章内容字段)进行查找多个关键字的实例代码。

1.Lucene说明Lucene是非常优秀的成熟的开源的免费的纯java语言的全文索引检索工具包。

Lucene的的强项在“建立索引”和”搜索“,而不是实现具体的”分词“。

Lucene支持对生成索引的进行”增,删,改,查“操作,这比自己建立的索引有了很大的进步。

可以使用专门的分词程序进行分词,在分词的结果上用Lucene建立索引。

2.用Lucene实现在一个或者多个字段中的检索主要是函数:MultiFieldQueryParser.parse(String[] query,String[] field,Occur[] occ,Analyzer analyzer);1)query:要查找的字符串数组2)field:要查找的字符串数组对应的字段(当然有可以相同的)3)occ:表示对应字段的限制。

有三种:Occur.MUST(必须有),Occur.MUST_NOT(必须没有),Occur.SHOULD(应该)4)analyzer:对查询数据的分析器,最好与建立索引时用的分析器一致3.代码示例下面这个程序可以实现在一个字段“contents”中查找多个关键字。

稍加修改也可以在多个字段查找多个关键字。

import org.apache.lucene.analysis.standard.StandardAnalyzer;import org.apache.lucene.document.Document;import org.apache.lucene.document.Field;import org.apache.lucene.index.IndexWriter;import org.apache.lucene.queryParser.MultiFieldQueryParser;import org.apache.lucene.search.BooleanClause.Occur;import org.apache.lucene.search.Hits;import org.apache.lucene.search.IndexSearcher;import org.apache.lucene.search.Query;public class MultiPhraseQuerySearcher {private static String indexPath = "E:\\Lucene\\index"; //索引保存目录public static void createIndex(){ //建立索引IndexWriter writer;try {writer = new IndexWriter(indexPath,new StandardAnalyzer(),true);Field fieldB1 = new Field("contents","今晚的辩题很道地:在我们这些人当中?",Field.Store.YES,Field.Index.TOKENIZED);Field fieldB2 = new Field("contents","我们为电影《今朝》是一部不错的影片。

Lucene是一套全文检索的API

Lucene是一套全文检索的API

Lucene是一套全文检索的API,对其介绍的文章和应用的案例都多,可参考lucene及本文的参考文献。

此次学习,以实用为主,一是简单应用,二是Web应用,三是汉化,四相关应用(Lucene主页上在SandBox中)。

0、准备工作去Lucene的主页下载目前的稳定版本lucene-1.2.tar.gz,解压缩,将lucene-1.2目录下的两个jar文件lucene-1.2.jar和lucene-demo2-1.2.jar放到适当的目录下后,并将其加入到CLASSPATH环境变量中。

tar zxvf lucene-1.2.tar.gz <----解压缩cd lucene-1.2cp *.jar $DP<---存放jar文件的目录,根据具体工作要求用实际目录替换CLASSPATH=$CLASSPATH:$DP/lucene-1.2.jar:$DP/lucene-demos-1.2.jar; export CLASSPATH如果不想在每次都登录后,可以编辑/etc/profile或自己目录下的.profile,将上面的最后一行加到文件的最后一行。

Windows的设置,右击桌面的“我的电脑”,选“高级”->“环境变量”->选中CLASSPATH->“编辑”,在输入框中加入两个jar文件的全路径名,注意分隔符是分号(;)。

参见右图。

1、运行demo$ java org.apache.lucene.demo.IndexFiles /usr/local/man/man1/ <--对man 文件建立索引adding /usr/local/man/man1/mysql.1...........adding /usr/local/man/man1/cvs.11614 total milliseconds$ java org.apache.lucene.demo.SearchFiles <--进行检索Query: passwordSearching for: password7 total matching documents0. /usr/local/man/man1/mysql.1......6. /usr/local/man/man1/mysqlshow.1Query:OK!Lucene自待的demo运行成功这个demo程序调用的主要API函数:/*关于索引的主要函数*/File file=new File(argv[]);IndexWriter writer = new IndexWriter("index", new StandardAnalyzer(), true);Document doc = new Document();doc.add(Field.Text("path", file.getPath()));doc.add(Field.Keyword("modified",DateField.timeToString(stModi fied())));FileInputStream is = new FileInputStream(f);Reader reader = new BufferedReader(new InputStreamReader(is));doc.add(Field.Text("contents", reader));writer.addDocument(doc);writer.optimize();writer.close();/*关于检索的主要函数*/Searcher searcher = new IndexSearcher("index");Analyzer analyzer = new StandardAnalyzer();Query query = QueryParser.parse(lineforsearch, "contents", analyzer); Hits hits = searcher.search(query);for (int i = start; i < hits.length(); i++) {Document doc = hits.doc(i);String path = doc.get("path");System.out.println(i + ". " + path);}3、运行LuceneWeb假定tomcat装在$TOMCATHOME目录下,具体应用时用真实的目录替换$TOMCATHOME。

使用Apache Lucene进行全文检索和信息检索

使用Apache Lucene进行全文检索和信息检索

使用Apache Lucene进行全文检索和信息检索随着数据量的日益增长,信息的获取和管理也变得越来越困难。

在这样的背景下,全文检索技术备受关注。

全文检索是指通过对文本内容进行扫描和分析,快速地查找出包含指定关键字或短语的文本,以满足用户的需求。

Apache Lucene是一款强大的全文检索引擎,具有高效、可靠、易于扩展等特点,广泛被运用于信息检索、文本分类、数据挖掘等领域。

一、Lucene的基本原理Lucene是一款基于Java语言的全文检索引擎,能够快速地在海量数据中查找指定的文本。

Lucene的检索原理可以简单地描述为:将需要检索的文本输入Lucene,Lucene建立索引文件,用户查询文本时,Lucene在索引文件中查找匹配结果,返回用户所需的信息。

Lucene的基本原理如下:1. 建立索引建立索引是Lucene进行全文检索的第一步。

在索引过程中,Lucene会对文本进行解析、分词、词语过滤等处理,然后将这些处理后的词语和其所在的文档信息存储到索引文件中。

通过如此的操作,Lucene做到了在指定时间内,快速地查找指定文本。

2. 查询当用户输入需要检索的文本时,Lucene会对该文本进行同样的预处理,得到其中的每个单独词语,并在索引文件中查找与该词语相匹配的文档。

Lucene采用了先搜索后排名的检索策略,即先找到与关键词匹配的文档,然后再通过算法对得到的结果进行排序,得出匹配度最高的文档。

3. 返回结果Lucene的返回结果是一个文档对象,其中包含了原始文本、关键词匹配的位置和得分等信息。

在大多数情况下,返回的文档对象并不是用户真正想要的结果,需要进行二次过滤和排序,才能得出目标结果。

二、Lucene的基本使用Lucene的使用可以简单地分为以下几个步骤:1. 创建索引创建索引是Lucene进行全文检索的第一步,也是最重要的一步。

在创建索引前,需要准备好需要检索的文本文件。

Lucene支持的文本格式包括txt、doc、pdf等。

JAVAlucene全文检索工具包理解使用

JAVAlucene全文检索工具包理解使用

申明:原文来自/98440293.html1 lucene简介1.1 什么是luceneLucene是一个全文搜索框架,而不是应用产品.因此它并不像 或者google Desktop那么拿来就能用,它只是提供了一种工具让你能实现这些产品.1.2 lucene能做什么要回答这个问题,先要了解lucene地本质.实际上lucene地功能很单一,说到底,就是你给它若干个字符串,然后它为你提供一个全文搜索服务,告诉你你要搜索地关键词出现在哪里.知道了这个本质,你就可以发挥想象做任何符合这个条件地事情了.你可以把站内新闻都索引了,做个资料库;你可以把一个数据库表地若干个字段索引起来,那就不用再担心因为“%like%”而锁表了;你也可以写个自己地搜索引擎……1.3 你该不该选择lucene下面给出一些测试数据,如果你觉得可以接受,那么可以选择.测试一:250万记录,300M左右文本,生成索引380M左右,800线程下平均处理时间300ms. 测试二:37000记录,索引数据库中地两个varchar字段,索引文件2.6M,800线程下平均处理时间1.5ms.2 lucene地工作方式lucene提供地服务实际包含两部分:一入一出.所谓入是写入,即将你提供地源(本质是字符串)写入索引或者将其从索引中删除;所谓出是读出,即向用户提供全文搜索服务,让用户可以通过关键词定位源.2.1写入流程源字符串首先经过analyzer处理,包括:分词,分成一个个单词;去除stopword(可选).将源中需要地信息加入Document地各个Field中,并把需要索引地Field索引起来,把需要存储地Field存储起来.将索引写入存储器,存储器可以是内存或磁盘.2.2读出流程用户提供搜索关键词,经过analyzer处理.对处理后地关键词搜索索引找出对应地Document.用户根据需要从找到地Document中提取需要地Field.3 一些需要知道地概念lucene用到一些概念,了解它们地含义,有利于下面地讲解.3.1 analyzerAnalyzer 是分析器,它地作用是把一个字符串按某种规则划分成一个个词语,并去除其中地无效词语,这里说地无效词语是指英文中地“of”、“the”,中文中地“地”、“地”等词语,这些词语在文章中大量出现,但是本身不包含什么关键信息,去掉有利于缩小索引文件、提高效率、提高命中率.分词地规则千变万化,但目地只有一个:按语义划分.这点在英文中比较容易实现,因为英文本身就是以单词为单位地,已经用空格分开;而中文则必须以某种方法将连成一片地句子划分成一个个词语.具体划分方法下面再详细介绍,这里只需了解分析器地概念即可.3.2 document 用户提供地源是一条条记录,它们可以是文本文件、字符串或者数据库表地一条记录等等.一条记录经过索引之后,就是以一个Document地形式存储在索引文件中地.用户进行搜索,也是以Document列表地形式返回.3.3 field一个Document可以包含多个信息域,例如一篇文章可以包含“标题”、“正文”、“最后修改时间”等信息域,这些信息域就是通过Field在Document中存储地.Field有两个属性可选:存储和索引.通过存储属性你可以控制是否对这个Field进行存储;通过索引属性你可以控制是否对该Field进行索引.这看起来似乎有些废话,事实上对这两个属性地正确组合很重要,下面举例说明:还是以刚才地文章为例子,我们需要对标题和正文进行全文搜索,所以我们要把索引属性设置为真,同时我们希望能直接从搜索结果中提取文章标题,所以我们把标题域地存储属性设置为真,但是由于正文域太大了,我们为了缩小索引文件大小,将正文域地存储属性设置为假,当需要时再直接读取文件;我们只是希望能从搜索解果中提取最后修改时间,不需要对它进行搜索,所以我们把最后修改时间域地存储属性设置为真,索引属性设置为假.上面地三个域涵盖了两个属性地三种组合,还有一种全为假地没有用到,事实上Field不允许你那么设置,因为既不存储又不索引地域是没有意义地.3.4 termterm是搜索地最小单位,它表示文档地一个词语,term由两部分组成:它表示地词语和这个词语所出现地field.3.5 tockentocken是term地一次出现,它包含trem文本和相应地起止偏移,以及一个类型字符串.一句话中可以出现多次相同地词语,它们都用同一个term表示,但是用不同地tocken,每个tocken标记该词语出现地地方.3.6 segment添加索引时并不是每个document都马上添加到同一个索引文件,它们首先被写入到不同地小文件,然后再合并成一个大索引文件,这里每个小文件都是一个segment.4 lucene地结构lucene包括core和sandbox两部分,其中core是lucene稳定地核心部分,sandbox包含了一些附加功能,例如highlighter、各种分析器.Lucene core有七个包:analysis,document,index,queryParser,search,store,util.4.1 analysis Analysis包含一些内建地分析器,例如按空白字符分词地WhitespaceAnalyzer,添加了stopwrod 过滤地StopAnalyzer,最常用地StandardAnalyzer.4.2 documentDocument包含文档地数据结构,例如Document类定义了存储文档地数据结构,Field类定义了Document地一个域.4.3 indexIndex 包含了索引地读写类,例如对索引文件地segment进行写、合并、优化地IndexWriter 类和对索引进行读取和删除操作地IndexReader类,这里要注意地是不要被IndexReader这个名字误导,以为它是索引文件地读取类,实际上删除索引也是由它完成, IndexWriter只关心如何将索引写入一个个segment,并将它们合并优化;IndexReader则关注索引文件中各个文档地组织形式.4.4 queryParserQueryParser 包含了解读查询语句地类,lucene地查询语句和sql语句有点类似,有各种保留字,按照一定地语法可以组成各种查询. Lucene有很多种Query类,它们都继承自Query,执行各种特殊地查询,QueryParser地作用就是解读查询语句,按顺序调用各种Query类查找出结果.4.5 searchSearch包含了从索引中搜索结果地各种类,例如刚才说地各种Query类,包括TermQuery、BooleanQuery等就在这个包里.4.6 storeStore包含了索引地存储类,例如Directory定义了索引文件地存储结构,FSDirectory为存储在文件中地索引,RAMDirectory为存储在内存中地索引,MmapDirectory为使用内存映射地索引.4.7 utilUtil包含一些公共工具类,例如时间和字符串之间地转换工具.5 如何建索引5.1 最简单地能完成索引地代码片断IndexWrite r writer = new IndexWriter(“/data/index/”, new StandardAnalyzer(), true)。

全文检索lucene研究

全文检索lucene研究

全文检索lucene研究本文由美白面膜排行榜/doc/4616316215.html,整理全文检索lucene研究1 Lucene简介Lucene是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎。

Lucene以其方便使用、快速实施以及灵活性受到广泛的关注。

它可以方便地嵌入到各种应用中实现针对应用的全文索引、检索功能,本总结使用lucene3.0.02 Lucene 的包结构1、analysis对需要建立索引的文本进行分词、过滤等操作2、standard是标准分析器3、document提供对Document和Field的各种操作的支持。

4、index是最重要的包,用于向Lucene提供建立索引时各种操作的支持5、queryParser提供检索时的分析支持6、search负责检索7、store提供对索引存储的支持8、util提供一些常用工具类和常量类的支持Lucene中的类主要组成如下:1)org.apache.1ucene.analysis语言分析器,主要用于的切词Analyzer是一个抽象类,管理对文本内容的切分词规则。

2)org.apache.1uceene.document索引存储时的文档结构管理,类似于关系型数据库的表结构。

3)document包相对而言比较简单,document相对于关系型数据库的记录对象,Field主要负责字段的管理。

4)org.apache.1ucene.index索引管理,包括索引建立、删除等。

索引包是整个系统核心,全文检索的根本就是为每个切出来的词建索引,查询时就只需要遍历索引,而不需要去正文中遍历,从而极大的提高检索效率。

5)org.apache.1ucene.queryParser查询分析器,实现查询关键词间的运算,如与、或、非等。

6)org.apache.1ucene.search检索管理,根据查询条件,检索得到结果。

7)org.apache.1ucene.store数据存储管理,主要包括一些底层的I/0操作。

Lucene的全文检索的研究与应用

Lucene的全文检索的研究与应用

收稿日期:2009-05-10;修回日期:2009-08-15基金项目:国家自然科学基金资助项目(60736014)作者简介:李永春(1985-),男,硕士研究生,研究方向为数据挖掘、信息检索;丁华福,教授,硕士生导师,研究方向为自然语言处理、数据挖掘。

Lucene 的全文检索的研究与应用李永春1,丁华福2(1.哈尔滨理工大学计算机学院,黑龙江哈尔滨150080;2.哈尔滨工业大学计算机学院,黑龙江哈尔滨150001)摘 要:为了改善传统全文检索方法在检索效率上的不足,结合Lucene 构建了一个全文检索系统模型。

介绍了全文检索的基本过程、Lucene 源码结构和逻辑结构,分析了Lucene 的索引组成,对比了Lucene 全文检索和其它全文检索的区别。

该模型可用于中小型的全文检索系统的实现,同时可基于此模型开发定制个性化的搜索引擎。

最后通过实验对比了其与传统检索方式的响应时间,利用Lucen e 的全文检索具有更快的响应速度。

关键词:全文检索;Lucene ;索引中图分类号:T P311 文献标识码:A 文章编号:1673-629X (2010)02-0012-04Research and Application of Full Text Search Based on LuceneLI Yong -chun 1,DING H ua -fu 2(puter Academy of Harbin University of Science and Technology ,Harbin 150080,China ;puter A cademy of Harbin U niv ersity of I ndustry ,Harbin 150001,China )Abstract :In order to improve the efficiency in traditional method of retrieval ,propose a s ystem model for full text s earch based on Lucene .First introduced the general process of full -text search ,Lucene code structure and l ogical structure ,compared to the differences betw een Lucene full -text search and other full -text search .This model can be us ed for s mall and m edium -sized ful l -text retrieval system and can be used to develop the personalized search engine .Final ly ,through experiments w ith the traditional retrieval methods ,bas ed on Lucene full -text search has a faster response speed .Key words :full text retrieval ;Lucene ;index0 引 言随着网络的发展以及数据库技术的成熟,人们已经可以存储大量的信息,如何在海量的信息中快速、准确地进行检索已成为人们越来越关心的问题。

lucene 全文检索数据库

lucene 全文检索数据库

我们以前经常碰到搜索数据库的内容;用like %的sql语句;如果数据量大而且多表查询时;用lucene2那就可以解决速度问题。

lucene2搜索photo表的title,username,tagname,desr内容;用一个例题来说明更直观;此例题能搜索中文分词;(需要mysql5的jdbc包和lucene2的包):1、数据库我用mysql5;建一个photo表;数据库名是test。

photo表有一下几个字段:CREATE TABLE `photo` (`photo_id` int(11) NOT NULL auto_increment,`title` varchar(11) default NULL,`address` varchar(50) default NULL,`descr` text,`user_id` int(11) default NULL,`user_name` varchar(11) default NULL,`upload_time` date default NULL,`tag_name` varchar(11) default NULL,PRIMARY KEY (`photo_id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=REDUNDANT;2、java文件有4个:文件Photo.java是数据库的photo表的操作文件;内容如下:import java.sql.Connection;import java.util.ArrayList;import java.util.Date;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;public class Photo {private long photoId;private String title;private String description;private String address;private String userName;private long userId;private String tag;private Date date;public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}public String getDescription() {return description;}public void setDescription(String description) { this.description = description;}public long getPhotoId() {return photoId;}public void setPhotoId(long photoId) {this.photoId = photoId;}public String getTag() {return tag;}public void setTag(String tag) {this.tag = tag;}public String getTitle() {return title;}public void setTitle(String title) {this.title = title;}public long getUserId() {return userId;}public void setUserId(long userId) {erId = userId;}public String getUserName() {return userName;}public void setUserName(String userName) {erName = userName;}public static Photo[] loadPhotos(Connection con) throws Exception { ArrayList<Photo> list = new ArrayList<Photo>();PreparedStatement pstm = null;ResultSet rs = null;String sql = "selectphoto_id,title,address,descr,user_id,user_name,upload_time,tag_name from photo";try {pstm = con.prepareStatement(sql);rs = pstm.executeQuery();while (rs.next()) {Photo photo = new Photo();photo.setPhotoId(rs.getLong(1));photo.setTitle(rs.getString(2));photo.setAddress(rs.getString(3));photo.setDescription(rs.getString(4));photo.setUserId(rs.getLong(5));photo.setUserName(rs.getString(6));photo.setDate(rs.getTimestamp(7));photo.setTag(rs.getString(8));list.add(photo);}System.out.println("com.upolestar.kmpm.po.Photo.java ========"+li st.size());} catch (SQLException e) {e.printStackTrace();} finally {if (rs != null) {rs.close();}if (pstm != null) {pstm.close();}}return (Photo[]) list.toArray(new Photo[list.size()]);}public Date getDate() {return date;}public void setDate(Date date) {this.date = date;}}文件IndexerFile.java是把数据库的内容备份成索引文件到磁盘中去;内容如下:package com.upolestar.kmpm.service;import java.io.IOException;import org.apache.lucene.analysis.standard.StandardAnalyzer;import org.apache.lucene.document.Document;import org.apache.lucene.document.Field;import org.apache.lucene.index.IndexWriter;import com.upolestar.kmpm.po.Photo;public class IndexerFile {public static int indexFile(String indexDir, Photo[] list)throws IOException {IndexWriter writer = new IndexWriter(indexDir, new StandardAnalyzer(), true);writer.setUseCompoundFile(false);for (int i = 0; i < list.length; i++) {Document doc = new Document();doc.add(new Field("photoId", String.valueOf(list[i].getPhotoId()), Field.Store.YES, Field.Index.NO));if (list[i].getTitle() != null)doc.add(new Field("title", list[i].getTitle(), Field.Store.YES,Field.Index.TOKENIZED));if (list[i].getDescription() != null)doc.add(new Field("description", list[i].getDescription(),Field.Store.YES, Field.Index.TOKENIZED));doc.add(new Field("address", list[i].getAddress(), Field.Store.YES, Field.Index.NO));doc.add(new Field("userName", list[i].getUserName(),Field.Store.YES, Field.Index.TOKENIZED));doc.add(new Field("userId", String.valueOf(list[i].getUserId()), Field.Store.YES, Field.Index.NO));if (list[i].getTag().length() > 0)doc.add(new Field("tag", list[i].getTag(), Field.Store.YES,Field.Index.TOKENIZED));doc.add(new Field("uploadTime", list[i].getDate().toLocaleString(), Field.Store.YES,Field.Index.TOKENIZED));writer.addDocument(doc);}int numIndexed = writer.docCount();writer.optimize();writer.close();return numIndexed;}}文件SearcherFile.java是搜索磁盘索引文件内容的;内容如下:package com.upolestar.kmpm.service;import java.io.IOException;import org.apache.lucene.analysis.Analyzer;import org.apache.lucene.analysis.standard.StandardAnalyzer;import org.apache.lucene.document.Document;import org.apache.lucene.queryParser.MultiFieldQueryParser;import org.apache.lucene.queryParser.ParseException;import org.apache.lucene.search.Hits;import org.apache.lucene.search.Query;import org.apache.lucene.search.Searcher;public class SearcherFile {public static void search(Searcher searcher, String[] q)throws IOException, ParseException {Analyzer analyzer = new StandardAnalyzer();String[] fields = { "title", "description", "tag", "userName" };Query query = MultiFieldQueryParser.parse(q, fields, analyzer);Hits hits = searcher.search(query);System.out.println("SearcherFile======"+hits.length());for (int i = 0; i < hits.length(); i++) {Document doc = hits.doc(i);System.out.println(doc.get("photoId") + "==="+ doc.get("uploadTime")+ "==="+ doc.get("title")+ "==="+ doc.get("description")+ "==="+ doc.get("tag")+ "==="+ doc.get("userName"));}}}文件test.java是操作的主文件;内容如下:package com.upolestar.kmpm.test;import java.io.IOException;import java.sql.Connection;import java.sql.SQLException;import java.util.Date;import org.apache.lucene.queryParser.ParseException; import org.apache.lucene.search.IndexSearcher;import org.apache.lucene.search.Searcher;import com.upolestar.kmpm.po.Photo;import com.upolestar.kmpm.service.IndexerFile;import com.upolestar.kmpm.service.SearcherFile;public class Test {public final static String indexDir = "D:\\TestLucene";private static Connection getConnection() {Connection conn = null;String url = "jdbc:mysql://localhost:3306/opencms";String userName = "root";String password = "1111";try {Class.forName("com.mysql.jdbc.Driver");conn = java.sql.DriverManager.getConnection(url, userName, password);} catch (Exception e) {e.printStackTrace();System.out.println("Error Trace in getConnection() : " + e.getMessage());}return conn;}public static void main(String[] args) throws IOException, ParseException,SQLException {index();// 做索引Searcher searcher = null;try {searcher = new IndexSearcher(indexDir);search(searcher);// 搜索} catch (Exception e) {e.printStackTrace();} finally {if (searcher != null)searcher.close();}}public static void search(Searcher searcher) throws IOException,ParseException {// 以下是搜索的关键词String[] q = { "SVN", "捱三", "null", "null" };long start = new Date().getTime();SearcherFile.search(searcher, q);long end = new Date().getTime();System.out.println("花费时间:" + (double) (end - start) / 1000 + "秒");}public static void index() throws SQLException {Connection conn = null;try {conn = getConnection();Photo[] list = Photo.loadPhotos(conn);IndexerFile.indexFile(indexDir, list);} catch (Exception e) {e.printStackTrace();} finally {if (conn != null) {conn.close();}}}}已经测试过!!。

基于Lucene的Oracle数据库全文检索

基于Lucene的Oracle数据库全文检索

中图分类号:TP311.13 文献标识码:A 文章编号:1009-2552(2010)03-0156-03基于Lucene的Oracle数据库全文检索葛振国,李 建,何林糠,吴 军(西南石油大学计算机科学学院,成都610500)摘 要:全文检索是信息时代必不可少的技术,应用越来越广泛。

文中对开源的搜索引擎工具包Lucene进行研究,并将其应用到全文检索系统中,详细介绍了如何使用Lucene来创建索引和检索数据,然后给出了一个针对Oracle数据库全文检索的实现方法。

关键词:Lucene;全文检索;OracleOracle database full2text search based on LuceneGE Zhen2guo,LI Jian,HE Lin2kang,WU Jun(School of Computer Science,Southw est Petroleum U niversity of China,Chengdu610500,China) Abstract:Full2text search is an indispensable technology for the information age and widely applied.This paper studies the tool kit Lucene of the open s ource search engine,applies it on the full2text search system, describes in detail how to index and search datas using Lucene,then gives an im plementation for Oracle database.K ey w ords:Lucene;full2text search;Oracle0 引言随着企业数据的不断增长,数据量急剧增多,从海量的数据中查找相关信息已经是每个企业必须要解决的问题,而搜索引擎正是解决这一问题的最为合理的方法,搜素引擎比传统的数据库模糊查询速度优势显而易见,也是后者望尘莫及的。

Lucene全文检索引擎简介

Lucene全文检索引擎简介

Lucene:基于Java的全文检索引擎简介1.基于Java的全文索引引擎Lucene简介:关于作者和Lucene的历史2.全文检索的实现:Luene全文索引和数据库索引的比较3.中文切分词机制简介:基于词库和自动切分词算法的比较4.具体的安装和使用简介:系统结构介绍和演示5.Hacking Lucene:简化的查询分析器,删除的实现,定制的排序,应用接口的扩展6.从Lucene我们还可以学到什么基于Java的全文索引/检索引擎——LuceneLucene不是一个完整的全文索引应用,而是是一个用Java写的全文索引引擎工具包,它可以方便的嵌入到各种应用中实现针对应用的全文索引/检索功能。

Lucene的作者:Lucene的贡献者Doug Cutting是一位资深全文索引/检索专家,曾经是V-Twin搜索引擎(Apple的Copland操作系统的成就之一)的主要开发者,后在Excite担任高级系统架构设计师,目前从事于一些INTERNET底层架构的研究。

他贡献出的Lucene的目标是为各种中小型应用程序加入全文检索功能。

Lucene的发展历程:早先发布在作者自己的,后来发布在SourceForge,2001年年底成为APACHE基金会jakarta的一个子项目:/lucene/已经有很多Java项目都使用了Lucene作为其后台的全文索引引擎,比较著名的有:•Jive:WEB论坛系统;•Eyebrows:邮件列表HTML归档/浏览/查询系统,本文的主要参考文档“TheLucene search engine: Powerful, flexible, and free”作者就是EyeBrows系统的主要开发者之一,而EyeBrows已经成为目前APACHE项目的主要邮件列表归档系统。

•Cocoon:基于XML的web发布框架,全文检索部分使用了Lucene•Eclipse:基于Java的开放开发平台,帮助部分的全文索引使用了Lucene对于中文用户来说,最关心的问题是其是否支持中文的全文检索。

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

全文检索系统的结构
为什么使用Lucene

Lucene作为一个全文检索引擎,其具有如下突出的优点: (1)索引文件格式独立于应用平台。Lucene定义了一套以8位字节为基础的索 引文件格式,使得兼容系统或者不同平台的应用能够共享建立的索引文件。 (2)在传统全文检索引擎的倒排索引的基础上,实现了分块索引,能够针对新 的文件建立小文件索引,提升索引速度。然后通过与原有索引的合并,达到优 化的目的。 (3)优秀的面向对象的系统架构,使得对于Lucene扩展的学习难度降低,方便 扩充新功能。 (4)设计了独立于语言和文件格式的文本分析接口,索引器通过接受Token流 完成索引文件的创立,用户扩展新的语言和文件格式,只需要实现文本分析的 接口。
创建索引
Directory indexDir = FSDirectory.open(new File(INDEXDIR)); IndexWriter writer = new IndexWriter(indexDir, analyzer, true, MaxFieldLength.LIMITED); // 2-索引目标 File file = new File(FILENAME); // 3-规定索引范围,目标写入 Document doc = new Document(); doc.add(new Field("name", file.getName(), Store.YES, Index.ANALYZED)); doc.add(new Field("content", IOUtils.readFileContent(file), Store.YES, Index.ANALYZED)); doc.add(new Field("size", NumericUtils.longToPrefixCoded(file.length()), Store.YES, Index.NOT_ANALYZED)); doc.add(new Field("path", file.getAbsolutePath(), Store.YES, Index.NOT_ANALYZED)); writer.addDocument(doc); writer.optimize(); // 5-生成索引 writer.close();
// 3-检索结果
Directory indexDir = FSDirectory.open(new File(INDEXDIR)); Searcher searcher = new IndexSearcher(indexDir,true); TopDocs topDocs = searcher.search(query, 100);
第一个是 FSDirectory,它表示一个存储在文件系统中的索引的位置。 第二个是 RAMDirectory,它表示一个存储在内存当中的索引的位置。
索引查询
// 1-划定检索范围 String[] fields = new String[] { "name", "content" }; QueryParser qp = new QueryParser(Version.LUCENE_36,fields , analyzer); // 2-检索关键字 String key = "泽元软件"; Query query = qp.parse(key);
public IndexWriter(String path, Analyzer a, boolean create) …… Parameters:
• path - the path to the index directory • a - the analyzer to use



String index = "C:\\tomcat\\webapps\\index1"; index IndexWriter writer = new IndexWriter(index, new StandardAnalyzer(),true);
帮助文档
入库逻辑
1.
入 库者定义到库中文档的结构,比如需要把网站内容加载到全文检索库,让 用户通过“站内检索”搜索到相关的网页内容。入库文档结构与关系型数据库 中的表结构类 似,每个入库的文档由多个字段构成,假设这里需要入库的网 站内容包括如下字段:文章标题、作者、发布时间、原文链接、正文内容(一 般作为网页快照)。 包含 N 个字段的文档( DOCUMENT )在真正入库前需要经过切词(或分词)索引, 切词的规则由语言分析器(ANALYZER)完成。 切分后的“单词”被注册到索引树上,供查询时用,另外也需要把其它不需要 索引的内容入库,所有这些是文件操作均由STORAGE完成。 Lucene的索引树结构非常优秀,是Lucene的一大特色。

经过分词处理后
文 章 1 的 所 有 关 键 词 为 : [tom] [live] [guangzhou] [i] [live] [guangzhou] 文章2的所有关键词为:[he] [live] [shanghai]

加上“出现频率”和“出现位置”信息后,我们的索引结构为:
文章号[出现频率] 1[2] 2[1] 1[1] 1[2],2[1] 2[1] 1[1] 出现位置 3,6 1 4 2,5,2 3 1
搜索引擎的历史
萌芽:Archie、Gopher 起步:Robot(网络机器人)的出现与Spider(网络爬虫) 发展:Excite、Galaxy、Yahoo等 繁荣:Infoseek、AltaVista、Google和什么是Lucene
Lucene 是非常优秀的成熟的开源的免费的纯 java 语言的全 文索引检索工具包。
• org.apache.lucene.document.Field
IndexWriter

IndexWriter是在索引过程中的中心组件。 IndexWriter这个类创建一个新的索引并且添加文档到一个 已有的索引中。你可以把IndexWriter想象成让你可以对索 引进行写操作的对象,但是不能让你读取或搜索。 IndexWriter不是唯一的用来修改索引的类 org.apache.lucene.i门实例

Lucene的主要逻辑图 创建索引 索引查询 帮助文档 理解核心索引类 理解核心搜索类 更新索引中的Document
Lucene的主要逻辑图

Lucene 功能强大,但从根本上说, 主要包括两块: 一是文本内容经切词后索引入库; 二是根据查询条件返回结果
• create - true to create the index or overwrite the existing one; false to append to the existing
Directory

Directory类代表一个Lucene索引的位置。它是一个抽象类. 其中的两个实现:
全文检索 是指计算机索引程序通过扫描文章中的每一个词,对每一个词建立一个索引,
指明该词在文章中出现的次数和位置,当用户查询时,检索程序就根据事先建立的索引 进行查找,并将查找的结果反馈给用户的检索方式。

Lucene 是 一 个 高 性 能 、 可 伸 缩 的 信 息 搜 索 (IR) 库 。 Information Retrieval (IR) library.它使你可以为你的 应用程序添加索引和搜索能力。 Lucene的作者Doug Cutting是资深的全文索引/检索专家, 最开始发布在他本人的主页上, 2001 年 10 月贡献给 APACHE , 成为APACHE基金的一个子项目。
(5)已经默认实现了一套强大的查询引擎,用户无需自己编写代码即使系统可 获得强大的查询能力, Lucene 的查询实现中默认实现了布尔操作、模糊查询 (Fuzzy Search)、分组查询等等。

开源,可扩展能力强,有各种语言版本,适合各种平台,
Lucene倒排索引原理

假设有两篇文章1和2
文 章 1 的 内 容 为 : Tom lives in Guangzhou,I 文章2的内容为:He once lived in Shanghai. live in Guangzhou too.
2.
3.
4.
5.
理解核心索引类

为了对文档进行索引,Lucene 提供了五个基础的类
public class IndexWriter
• org.apache.lucene.index.IndexWriter
public abstract class Directory
• org.apache.lucene.store.Directory
public abstract class Analyzer
• org.apache.lucene.analysis.Analyzer
public final class Document
• org.apache.lucene.document.Document
public final class Field
关键词 guangzhou he i live shanghai tom
Lucene只关注文本的索引和搜索
lucene建立索引的来源
Nutch

我们来大概了解一下Nutch,以及你将在哪方面运用它?
我还是先说一下Lucene吧。Lucene其实是一个提供全文文本搜索的函数库,它不是一个 应用软件。它提供很多API函数让你可以运用到各种实际应用程序中。现在,它已经成为 Apache 的 一 个 项 目 并 被 广 泛 应 用 着 。 这 里 列 出 一 些 已 经 使 用 Lucene 的 系 统 。 Nutch 是一个建立在Lucene核心之上的Web搜索的实现,它是一个真正的应用程序。也就 是说,你可以直接下载下来拿过来用。它在 Lucene 的基础上加了网 络爬虫和一些和 Web 相关的东东。其目的就是想从一个简单的站内索引和搜索推广到全球网络的搜索上,就 像 Google和 Yahoo一样。当然,和那些巨人 竞争,你得动一些脑筋,想一些办法。我们 已经测试过 100M的网页,并且它的设计用在超过 1B的网页上应该没有问题。当然,让它 运行在一台机器上,搜索一 些服务器,也运行的很好。
相关文档
最新文档