首先,数据分两种:结构化数据和非结构化数据
结构化数据如数据库数据非结构化数据如邮件,word文档
非结构化数据的另一种叫法是全文数据
当然还有一种分类为半结构化数据:如html和xml数据;半结构化数据可以根据需要按照结构化数据来处理,也可以按照非结构化数据来处理
结构化数据本来就是按照一定的规则来组织的数据,不用多说;关键的问题就在于非结构化数据即全文数据的搜索上。
全文数据的搜索主要有两种: 1.顺序扫描法 2.全文检索法
1.顺序扫描法在NT系统里面就有体现,windows当中的搜索功能就有搜索文件,或者搜索文件内容的选项;如果是按照搜索文件当中的内容时,那么windows就会顺序扫描计算机当中的每一个文件,去查找包含指定内容的文件。不用多说,会非常慢。
2.全文检索接触过数据库之后,针对数据库当中的结构化数据的搜索速度是很快的,而将非结构化的数据转换成结构化的数据,然后再进行搜索,这就是全文检索的基本思路了。
这也就是说,全文检索分为两步,首先将非结构化的数据整理成结构化的----建立索引的过程
然后对结构化的数据搜索的过程------对索引进行搜索的过程
总结:这种先建立索引,然后再对索引进行搜索的过程叫做全文检索
1.索引创建:
首先,索引里面究竟存些什么?
想这个问题的时候,想一下顺序搜索:非结构化数据中所存储的是每个文件都包含哪些字符串,即已知文件欲求字符串相对容易,也即是文件到字符串的映射。而NT系统下的搜索是已知字符串,去搜索文件,即字符串到文件的映射。这就相对困难了。因为基础是文件到字符串的映射,而搜索的时候倒过来从字符串去映射文件。所以,如何在文件到字符串映射的基础上,保存文件到字符串的映射关系,那么搜索的时候就相对简单了。
总结:由于文件到字符串的映射是字符串到文件的映射的反向过程,因此这种索引被称作反向索引。
大致存储结构如下:字符串----文档列表
此处的字符串称为字典,文档列表称为倒排表
term
term是搜索的最小单位,它表示文档的一个词语,term由两部分组成:它表示的词语和这个词语所出现的field。
tocken
tocken是term的一次出现,它包含trem文本和相应的起止偏移,以及一个类型字符串。一句话中可以出现多次相同的词语,它们都用同一个term表示,但是用不同的tocken,每个tocken标记该词语出现的地方。
其次,如何创建索引?
1.首先是拿到文档 2.将文档传给分词组件(Tokenizer) 分词组件会做如下事情:
2.1将文档分成一个一个单独的单词
2.2去除标点符号
2.3去除停词
3.将得到的单词或者说是词元传给语言处理组件,对于英语,语言处理组件一般做以下几点:
3.1变为小写
3.2将单词缩减为词根形式,如cars到car等。这种操作称为:stemming。
3.3将单词转变为词根形式,如drove到drive等。这种操作称为:lemmatization
两者的异同:
相同之处:两者都要使词汇成为词根形式。
不同之处: stemming采用的是缩减的方式:cars到car,driving到drive
lemmatization采用的是转变的方式:drove到drive,driving到drive。
算法不同: stemming主要是采取某种固定的算法来做这种缩减,如去除s,去除ing加e,将ational变为ate,将tional变为tion
lemmatization主要是采用保存某种字典的方式做这种转变。比如字典中有driving道drive,drove到drive,am、is、are到be的映射,做转变时,只要查字典就可以了。
总结: stemming和lemmatization不是互斥关系,是有交集的,有的词利用这两种方式都能达到相同的转换。
4.将得到的词传给索引组件indexer
4.1利用得到的词(Term)创建一个字典。
4.2对字典按字母顺序进行排序
4.3合并相同的词(Term)成为文档倒排(Posting List)链表形成文档倒排链表的过程中,有两个定义:(注意这两个定义)
文档频次(df)(Document Frequency),表示总共有多少文件包含此词
词频率(tf)Frequency,表示此文件中包含了多少个此词
总结:从理论上来讲,拿到原始数据,然后传给分词组件,先将文档经过分词组件的分析,然后经过语言处理组件,最后就到了分词组件,最关键的应该是分词组件部分。这一部分可以单独研究一下
最后,如何对索引进行搜索?
1.用户输入查询语句
2.对查询语句进行词法分析,语法分析,语言处理。
词法分析主要用来识别单词和关键字;比如用户输入“lucene and lerned not hadoop”,
经过词法分析得到的单词有:lucene,learned,hadoop,关键字有and,not。
分享到:
相关推荐
《Lucene全文检索:简单索引与搜索实例详解》 Lucene是Apache软件基金会的开源项目,是一款强大的全文检索库,被广泛应用于Java开发中,为开发者提供了构建高性能搜索引擎的能力。在本文中,我们将深入探讨如何基于...
学习全文检索总结的理论知识总结分享;学习全文检索总结的理论知识总结分享
oracle 全文检索 oracle全文索引 多列字段检索,匹配多列字段搜索功能。
总的来说,Lucene.Net 在 .Net MVC4 上实现全文检索是一个涉及数据库交互、索引构建、查询处理和结果展示的综合过程。通过熟练掌握 Lucene.Net 的使用,可以为用户提供高效、准确的全文搜索体验。
密文全文检索系统中的索引机制研究的文献文献
WebSolrDemo是一个示例项目,它展示了如何在Web应用中实现全文检索和全文索引功能,使用的核心技术是Apache Solr。Apache Solr是一款开源的企业级搜索平台,能够处理大量数据并提供高效的全文检索能力。 全文检索是...
### 全文自动检索系统中的快速检索与索引文件压缩算法 #### 摘要与背景 随着信息技术的迅速发展,人类面临的信息处理量日益增大,尤其在处理海量数据(通常指数百兆字节以上)时,传统的信息处理速度已无法满足...
文档UAP65如何配置全文检索功能进行了详细的描述,包括如何配置sysconfig,如何配置索引等相关内容
Oracle全文检索技术是数据库管理系统Oracle中用于高效查找和分析文本数据的一种功能。它在不同的Oracle版本中有着不同的名称,如Oracle8.0.x中的ConText,Oracle8i中的interMedia Text,以及从Oracle9i开始的Oracle ...
在实际应用中,根据业务需求,可能还需要考虑索引的维护策略,如定期清理无用的索引,监控索引的性能和空间占用,以及优化全文检索的查询语句以提高查询效率。 总之,Oracle的全文检索功能为处理大量文本数据的查询...
系统的介绍了JAVA应用全文检索,包括定时根据数据库数据创建索引、记录日志、检索查询
Oracle 全文检索实现的总体架构图由五个部分组成:XML 配置文件、读取器、索引器、索引库和检索器。其中,XML 配置文件存储数据库的配置信息,包括需要全文检索的表名和列名。读取器读取 XML 配置文件中的信息,并...
全文检索系统是一种根据全文检索理论构建的软件系统,旨在提供高效的全文检索服务。该系统主要包括索引引擎、查询引擎、文本分析引擎、对外接口及各种外围应用系统。其中,Lucene是全文检索系统的核心组成部分。 ##...
总的来说,将Lucene应用于Android的全文检索是一个复杂的过程,涉及到索引创建、查询执行、结果高亮等多个步骤。通过合理设计和优化,我们可以为用户打造一个高效、友好的搜索体验。在实际开发中,参考《android+...
而全文索引则针对文本字段,它创建了一个包含所有可能词项的索引,允许用户进行模糊匹配、部分词汇搜索甚至短语搜索。全文索引通过词法分析器(英语中的“英语词干提取器”)处理文本,识别出单词的根形式,这样可以...
Oracle数据库,作为业界领先的关系型数据库管理系统之一,自Oracle9i Release 2起便引入了强大的全文检索功能——Oracle Text。这一功能不仅提升了文本数据的检索效率,还拓展了文本管理的能力,使其成为企业级...
3. **索引(Index)**:索引是Lucene的核心,它是对文档集合的结构化表示,使得能快速进行全文检索。Lucene通过分词(Tokenization)、词干提取(Stemming)、去除停用词(Stopword Removal)等过程将原始文本转换...