在http://xdwangiflytek.iteye.com/blog/1386439里我简单的介绍了一下SEO,下面来学习一下Lucene技术,这部分先来理解几个概念。
信息检索概念:
信息检索就是从信息集合中找出与用户需求相关的信息。被检索的信息除了文本外,还有图像、音频、视频等多媒体信息,这里我们主要来说说文本信息的检索。
信息检索的分类:
全文检索:把用户的查询请求和全文中的每一词进行比较,不考虑查询请求与文本语义上的匹配,在信息检索工具中,全文检索是最具通用性和实用性的。(通俗的讲就是匹配关键字的)
数据检索:查询要求和信息系统中的数据都遵循一定的格式,具有一定的结构,允许对特定的字段检索,其性能与使用有很大的局限性,并且支持语义匹配。
知识检索:强调的是基于知识的、语义的匹配(最复杂的,它就相当于我们知道了搜索问题的答案,再直接去搜答案的信息)。
说明:
全文检索是指计算机索引程序通过扫描文章中的每一个词,对每一个词建立一个索引,指明该词在文章中出现的次数和位置,当用户查询的时候,检索程序就根据事先建立好的索引进行查找,并将查找的结果反馈给用户的检索方式。
数据检索查询要求和信息系统中的数据都遵循一定的格式,具有一定的结构,允许对特定的字段检索。例如,数据均按“时间、人物、地点、事件”的形式存储,查询可以为:地点=“北京”。数据检索的性能取决于所使用的标识字段的方法和用户对这种方法的理解,因此具有很大的局限性。
信息检索的基本流程:
步骤:
1、在文本框中输入关键字
2、搜索引擎(信息检索信息)从互联网(信息集合)中找出包含这些关键词的若干网页(相关信息),并按照一定的准则(相关度)排序,然后将部分结果返回(分页)。
全文检索中索引的建立与进行索引的流程:
为了提供检索的功能,信息检索系统会事先做一些准备工作:信息的采集与加工。
信息采集:把信息源的信息拷贝到本地,构成待检索的信息集合;
信息加工:为采集到本地的信息编排索引,为查询做好准备;
说明:
在Internet上采集信息的软件被称为爬虫或蜘蛛或网络机器人(搜索引擎外围的东西),爬虫在Internet上访问每一个网页,每访问一个网页就把其中的内容传回本地服务器。
信息加工的最主要的任务就是为采集到本地的信息编排索引,为查询做好准备。
分词器的作用:
分词器,对文本资源进行切分,将文本按规则切分成一个个进行索引的最小单位(关键词)
上面的这段文本经过分词后如下:
1
|
2
|
3
|
4
|
5
|
6
|
7
|
8
|
9
|
我
|
在
|
Iteye
|
上
|
的
|
博客
|
地址
|
是
|
Xdwangiflytek
|
建立索引和进行搜索时都要用到分词器,为了保证正确的搜索到结果,在建立索引与进行搜索时使用的分词器应为同一个,就好比加密解密使用的密钥也是同一个的道理是一样的。
英文分词(分词器的工作流程):
英文分词大致过程如下:
说明:
形态还原,即去除单词的形态,比如worked---》work、studies---》study
如对“IndexWriter
addDocument’s a javadoc.txt”进行分词:
关键词切分:“IndexWriter”、“addDocument’s”、“a”、“javadoc.txt”
去除停留词:“IndexWriter”、“addDocument’s”、“javadoc.txt”
形态还原:“IndexWriter”、“addDocument”、“javadoc.txt”
转为小写:“IndexWriter”、“addDocument”、“javadoc.txt”
中文分词:
中文的分词比较复杂,因为不是一个字就是一个词,而且一个词在另外一个地方可能不是一个词,如在“帽子和服装”中,“和服”就不是一个词,对于中文分词,通常有三种方式:单字分词、二分法分词、词典分词
单字分词:就是按照中文一个字一个字的分词,如“我叫王旭东“---我、叫、王、旭、东(StandardAnalyzer)
二分法分词:按两个字进行切分,如“我叫王旭东”---我叫、叫王、王旭、旭东(CJKAnalyzer)
词典分词:按某种算法构造词,然后去匹配已建好的词库集合,如果匹配到就切分出来成为词语,通常词库分词被认为是最理想的中文分词算法,如“我叫王旭东”---我叫、王旭东。
停用词:
有些词在文本中出现的频率非常高,而且对文本所表达的意思没有影响,如英文的“a、an、the、of”或中文的“的、了、着”,以及标点符号,这样的词被称为“停用词”。文本经过分词后,停用词通常被过滤掉,不会被进行索引。在检索的时候,用户的查询中如果含停用词,检索系统也会将其过滤掉(因为用户输入的查询字符串也要进行分词处理)。排除停用词可以加快索引的速度,还可以减少索引文件的大小。
倒排序索引结构:
通俗的说不是这个文档当中有几个词,而是现在说有几个词分别在哪些文档中包含(反过来了)
索引文件的检索与维护:
词汇表规模相对较小,文档集合规模较大,进行检索时,先从检索词汇表开始,然后找到相对应的文档。如果查询中仅包含一个关键词,则词汇表中找到该单词,并取出他对应的文档就可以了,如果查询中包含多个关键词,则需要将各个单词检索出的记录进行合并。
维护倒排索引有三个操作:插入、删除和更新文档,但是更新操作需要较高代价,因为文档修改后(即使是很小的修改),都可能会造成文档中的很多的关键词的位置发生变化,这就需要频繁的读取和修改记录,这种代价是很大的,因此一般都不进行更新操作,而是使用先删除后创建的方式代替更新操作。
下次会正式进行Lucene主题里。
- 大小: 15 KB
- 大小: 13.6 KB
- 大小: 7.2 KB
- 大小: 10.6 KB
分享到:
相关推荐
Lucene的核心功能主要分布在以下几个模块: 1. 分析器(Analyzer):这是Lucene处理文本输入的关键组件,它将用户输入的文本分解成可搜索的词项(Tokens)。分析器可以定制,以适应各种语言和应用场景,例如,英语...
在使用Lucene-2.4.0时,开发者需要理解以下几个关键概念: - **索引**:Lucene通过创建倒排索引来实现快速搜索。索引过程将文档内容转换为可搜索的数据结构,包括词项(Term)、词项频率(TF)和位置信息。 - **...
Lucene的学习过程通常包括以下几个关键部分: 1. **文本分析**:Lucene使用Analyzer进行文本预处理,包括分词、去除停用词、词形还原等。了解不同Analyzer如StandardAnalyzer、ChineseAnalyzer的区别和应用场景至关...
Lucene.Net 4.8.0的源码结构复杂而有序,主要包括以下几个关键组件: - **Index**:实现索引的创建、读取和更新。 - **Search**:提供查询执行和结果排名的相关类。 - **Analysis**:包含了各种分析器的实现。 - **...
Lucene的核心概念包括以下几个方面: 1. **索引**:在Lucene中,索引是将非结构化的文本数据转化为可搜索的形式。它通过分词器(Tokenizer)将文本拆分成单词,然后对这些单词创建倒排索引。倒排索引是一种数据结构...
在Lucene 1.4.3中,这一过程主要由以下几个关键组件驱动: 1. 分析器(Analyzer):分析器是处理文本输入的关键,它将文本拆分成可搜索的术语。Lucene 1.4.3包含了几种预定义的分析器,如StandardAnalyzer,它们...
“lucene-project.zip”中的程序可能包括以下几个关键部分: 1. **创建索引(Indexing)**:这部分代码会读取数据源(如文件、数据库等),创建Lucene文档,然后使用IndexWriter将这些文档写入索引。 2. **搜索...
源码主要分为几个关键部分: 1. 分析器(Analyzers):包含各种语言的分析器实现,如StandardAnalyzer、SimpleAnalyzer、WhitespaceAnalyzer等。 2. 搜索(Search):实现搜索算法,包括查询解析、评分函数、排序...
Lucene主要由以下几个核心组件构成: - 分析器(Analyzer):负责将原始文本转换为可搜索的Token流。 - 索引(IndexWriter):用于构建倒排索引。 - 索引读者(IndexReader):读取已经建立的索引。 - 搜索器(Searcher):...
在Lucene 4.7.0的版本中,官方文档详细阐述了以下几个关键知识点: 1. **Lucene的基本概念**:包括倒排索引、分词器(Analyzer)、文档(Document)、字段(Field)、索引(Index)、查询(Query)等基本元素。倒排...
每个概念和功能都有配套的示例代码,方便开发者快速理解和应用。 通过深入学习Apache Lucene 4.6.1的官方文档,开发者可以掌握搜索引擎的核心原理,以及如何在实际项目中有效地使用Lucene,实现高效、精准的信息...
在Linux环境下,Lucene的安装和使用通常包括以下几个步骤: 1. **下载与解压**:首先,你需要从官方网站或可靠的源获取`lucene-8.8.1.tgz`压缩包,然后使用`tar`命令进行解压,例如: ``` wget ...
Lucene的架构主要包括以下几个部分: 1. 文档(Document):代表要索引的信息,可以包含多个字段(Field)。 2. 字段(Field):文档中的具体信息,如标题、内容、作者等,每个字段都有自己的属性,如是否可搜索、...
学习Lucene,你需要理解以下几个关键概念: 1. 分词器(Tokenizer):将输入文本分割成独立的搜索词(Token)。 2. 字段(Field):文档中的数据单元,如标题、内容等,每个字段都可以有不同的索引和存储属性。 3. ...
在Lucene.Net 2.1.0版本中,有几个关键知识点值得一提: 1. **分词器(Tokenizer)与分析器(Analyzer)**:分词器将原始文本分解为可搜索的词汇单元,而分析器则负责整个过程,包括分词、去除停用词、词形还原等。...
在Lucene 3.0.2 API中,有以下几个关键组件和概念: 1. **Analyzer**:分析器是处理用户输入查询和文档内容的关键。它负责将文本分词、去除停用词、词形还原等预处理工作。例如,`StandardAnalyzer`是默认的分析器...
在Lucene 2.4.1中,主要涉及以下几个关键组件: 1. **Analyzer**:分析器是Lucene中的核心组件之一,负责将输入的文本转换为一系列可搜索的词项(Term)。分析器的选择和定制对于搜索性能和精度至关重要,2.4.1版本...
为了更好地利用Lucene,开发者需要掌握以下几个关键概念: 1. 文档(Document):代表要被搜索的信息,可以包含多个字段(Field)。 2. 字段(Field):文档中的数据单元,每个字段都有自己的属性,如是否可搜索、...
对于初学者来说,掌握几个核心类的理解和使用是至关重要的。下面我们将深入探讨与标题和描述相关的几个关键Lucene类,以及如何进行建索引和查询操作。 1. **Analyzer**: 分析器是Lucene的核心组件之一,负责将输入...
在学习 Lucene 时,你需要掌握以下几个关键点: - **分析器(Analyzer)**:分析器是 Lucene 处理文本的关键组件,它负责将文本分割成单词(分词),去除停用词,进行词形还原等预处理工作。不同的语言和应用场景...