全文检索中的索引策略-倒排索引
全文检索原理

全文检索原理
全文检索是一种基于文本内容进行搜索的技术,其原理是通过对文档中的所有文字进行索引,以建立一个能够快速查找文档的数据结构。
全文检索不仅仅是简单的关键词匹配,而是通过对文档内容进行分词和建立索引来实现高效的检索。
首先,全文检索系统需要对文档进行分词,将文本内容按照一定的规则进行切分,得到一个个单独的词语(或称为词项)。
接下来,对于每个词语,系统会建立一个倒排索引。
倒排索引是一种将词语与包含该词语的文档进行映射的数据结构,可以理解为一个词语到文档的映射表。
在搜索时,用户输入一个查询关键词,系统会将该关键词进行分词,并在倒排索引中查找包含该关键词的文档。
通过倒排索引,系统可以快速定位到包含关键词的文档,并返回给用户。
同时,全文检索系统还可以根据一定的算法对搜索结果进行排名,以提供更加精准的搜索结果。
常用的排名算法包括TF-IDF(词频-逆文档频率)和BM25(BM25评分算法)等。
总结来说,全文检索通过对文档内容进行分词和建立倒排索引的方式,实现了对文本内容的快速搜索和定位。
它已经被广泛应用于搜索引擎、信息检索系统、电商平台等各种领域。
Elasticsearch之全文检索与倒排索引

Elasticsearch之全⽂检索与倒排索引 Elasticsearch 是⼀种⾼度可伸缩的全⽂检索和分析引擎,其底层基于 Apache Lucene,Lucene 本⾝早就是⼀种闻名于世的全⽂检索和⼯具包。
Elasticsearch 在其基础上进⾏了封装,不仅继承了 Lucene 的所有优点,还⼤⼤降低了使⽤和开发的复杂度。
不仅如此,ES 也拥有强⼤的数据存储能⼒,它所检索的数据不依赖于外部数据源,⽽是由 ES 统⼀管理。
ES 还具备创建数据分⽚和数据副本的能⼒,可以满⾜⼤数据量下的⾼可⽤性和⾼性能要求。
所以 ES 也成归类为⼀种基于⽂档的 NoSQL 数据库,类似于 MongoDB。
⽽也是因为 ES 强⼤的数据存储能⼒,所以才有强⼤的检索和分析能⼒。
全⽂检索与倒排索引 Elasticsearch 中的索引是倒排索引(Inverted Index),是⼀种专门应⽤于全⽂检索的索引类型。
全⽂检索 什么叫做全⽂检索? 数据检索的⽬的是从⼀系列数据中,根据某⼀或某些数据特性将特定的数据找出来。
从数据检索的⾓度来看,数据⼤体上可以分为两种类型:⼀种是结构化数据;另⼀种是⾮结构化数据。
结构化数据:将数据具有的特征事先以结构化的形式定义好,数据有固定的格式或有限的长度。
例如传统关系型数据库的表结构,数据特征直接体现在表结构的字段上。
⾮结构化数据:没有预定定义好的结构化特征,也没有固定格式和固定长度。
例如,⽂章、图⽚、视频、⽹页、邮件等。
其中像 HTML ⽹页这种具有⼀定格式的⽂档也称为半结构化数据。
在实际的数据检索中,通常是像⽂章、⽹页、邮件这种全⽂本(Full-text)数据的检索需求占⼤多数,因此形成了⼀门独⽴学科,称为全⽂检索。
在 Elastic 官⽹中,经常称全⽂本数据为全⽂数据,称全⽂数据中的⼀条数据为⽂档(Document),⽽称存储全⽂数据的数据库为全⽂数据库。
因此,简单来说,全⽂检索是指全⽂数据中检索单个⽂档或⽂档集合的搜索技术,⽽ Elasticserach 从这个⽅⾯来说也可以理解为是⼀个全⽂数据库。
全文检索应该具备的能力

全文检索应该具备的能力全文检索应该具备的能力全文检索是一种用于在大规模文本数据集中进行高效搜索和查找的技术。
为了实现全文检索的功能,一个好的全文检索引擎应该具备以下能力:1. 分词与索引:全文检索引擎需要将文本数据进行分词处理,将文本拆分成独立的词语或词组,然后对这些词语或词组进行索引,以便能够快速地查找相关文档。
分词可以采用不同的算法和工具,如中文分词器、英文分词器等。
2. 倒排索引:全文检索引擎通常使用倒排索引(Inverted Index)的数据结构来存储索引信息。
倒排索引将词语或词组和它们在文档中的位置进行关联,以便进行快速的搜索和定位。
通过倒排索引,可以根据关键词快速找到包含该关键词的文档。
3. 相关性排序:全文检索引擎应该能够根据查询的相关性对搜索结果进行排序。
相关性排序可以使用不同的算法,如TF-IDF(词频-逆文档频率)、BM25(BM25算法是一种用于根据关键字在文档中的出现频率搜索结果排序的算法)等。
通过相关性排序,可以将与查询最相关的文档排在前面,提高搜索的准确性。
4. 支持多种查询类型:全文检索引擎应该支持不同类型的查询,如关键词查询、词组查询、模糊查询、范围查询等。
不同的查询类型可以满足用户不同的搜索需求,提供更加灵活和准确的搜索结果。
5. 处理大规模数据集:全文检索引擎需要具备处理大规模数据集的能力。
它应该能够高效地存储和处理大量的文本数据,保证搜索的性能和响应时间。
6. 支持高并发和分布式部署:全文检索引擎应该支持高并发的搜索请求,并具备水平扩展和分布式部署的能力。
这样可以满足大规模应用的需求,保证系统的可靠性和稳定性。
7. 强大的搜索语法和查询DSL:全文检索引擎应该提供丰富的搜索语法和查询DSL(Domain Specific Language)以支持复杂的查询需求。
通过灵活的查询语法,用户可以更加精准地进行搜索,并过滤、排序、聚合等。
综上所述,一个好的全文检索引擎应该具备分词与索引、倒排索引、相关性排序、支持多种查询类型、处理大规模数据集、支持高并发和分布式部署、强大的搜索语法和查询DSL等能力。
什么是全文检索全文检索的简介

什么是全文检索全文检索的简介全文检索是一种将文件中所有文本与检索项匹配的文字资料检索方法。
那么你对全文检索了解多少呢?以下是由店铺整理关于什么是全文检索的内容,希望大家喜欢!全文检索的简介基本介绍全文检索是将存储于数据库中整本书、整篇文章中的任意内容信息查找出来的检索。
它可以根据需要获得全文中有关章、节、段、句、词等信息,也就是说类似于给整本书的每个字词添加一个标签,也可以进行各种统计和分析。
例如,它可以很快的回答“《红楼梦》一书中“林黛玉”一共出现多少次?”的问题。
与之相关的议题语根处理 (stemming)符素解析器 (token parser) 1-gram, 2-gram , n-gram断词/分词 word segmentation倒排索引 inverted index算法、搜寻策略之模型布尔式 boolean统计模型 Probabilistic model向量空间模型 vector base model隐性语义模型 Latent semantic model系统检索的介绍评量之准则判断检索效果的两个指标:查全率=被检出相关信息量/相关信息总量(%)查准率=被检出相关信息量/被检出信息总量(%)开放源代码之全文检索系统Apache SolrBaseXClusterpoint Server(freeware licence for a single-server) DataparkSearchFerretHt-//DigHyper EstraierKinoSearchLemur/IndriLucenemnoGoSearchSphinxSwish-eXapianElasticSearch议题优化的概念和中文有关的议题断词(分词)语法解析古籍议题多语言混合优化剔除字(Stopwords)词性标注权威档(authority file)知识体系,本体论(ontology)超链接分析(page rank)技术历史及未来之趋势自由语句搜寻基于自然语言的分词。
c语言中索引文件

c语言中索引文件索引文件是一种用于快速查找和定位数据的数据结构。
在C语言中,我们可以使用各种方法和技术来实现索引文件,以提高数据的检索效率和性能。
一、什么是索引文件索引文件是一种用于加快数据检索速度的文件结构。
它通过建立关键字和数据之间的映射关系,将数据按照一定的排序方式存储在文件中,并创建一个索引结构来指向这些数据,从而实现快速查找和定位数据的目的。
二、索引文件的特点1. 提高检索效率:索引文件通过建立索引结构和使用合适的搜索算法,可以大大提高数据的检索效率,减少搜索时间和资源消耗。
2. 节省存储空间:索引文件可以通过压缩和优化存储结构,减少占用的存储空间,从而提高存储效率。
3. 支持快速定位:索引文件通过指向数据的索引结构,可以快速定位到需要查找的数据,提高定位速度和准确性。
4. 支持数据排序:索引文件可以按照关键字对数据进行排序,从而方便按照特定的顺序进行检索和遍历。
三、索引文件的实现方法1. 顺序索引:顺序索引是一种简单直观的索引方法,它将关键字按照一定的顺序存储在索引文件中,并创建一个指向数据的指针结构。
通过二分查找等算法,可以在索引文件中快速定位到需要查找的数据。
2. 哈希索引:哈希索引是一种基于哈希函数的索引方法,它将关键字通过哈希函数转化为索引值,并将数据存储在对应的索引位置。
通过计算哈希函数和解决哈希冲突的方法,可以快速定位到需要查找的数据。
3. B树索引:B树索引是一种平衡多路查找树的索引方法,它将数据按照一定的顺序存储在B树中,并创建一个指向数据的指针结构。
通过B树的平衡性和多路性质,可以快速定位到需要查找的数据。
4. 倒排索引:倒排索引是一种用于全文检索的索引方法,它将关键字和出现该关键字的文档列表建立映射关系。
通过倒排索引,可以快速定位到包含指定关键字的文档。
四、索引文件的应用场景索引文件广泛应用于各种需要高效检索和定位数据的场景,如数据库管理系统、搜索引擎、文件系统等。
全文检索 原理

全文检索原理
全文检索(Full-Text Search)是指对一段文本中的所有内容进
行检索查询,而不仅仅是针对标题或关键字进行搜索。
在全文检索中,不管文本内容的长度或类型,系统都会将整段文本进行索引,并根据查询条件从索引中匹配相应的文本。
全文检索的原理一般包括以下几个步骤:
1. 分词:将待检索的文本按照一定规则切分成词(或称为词条、索引项),通常使用空格或标点符号作为分隔符。
2. 建立倒排索引:将分词得到的词条进行排序,并建立一个由词条指向文档的索引表。
倒排索引可以加快检索速度,通过索引表可以快速找到包含某个词条的文档。
3. 查询处理:根据用户的查询条件,先对查询语句进行分词,然后通过倒排索引将分词后的词条与已建立的索引表进行匹配。
4. 权重排序:根据词条在文档中的出现频率和重要性,计算出文档与查询的相关度得分,并根据得分对文档进行排序。
常用的算法有TF-IDF(词频-逆向文档频率)和BM25(Okapi-
BM25)等。
5. 返回结果:将匹配的文档按照相关度得分的高低返回给用户,用户可以根据需要进行进一步的筛选和排序。
需要注意的是,在全文检索中,标题并不是必须的,因为全文
检索是对整段文本进行检索,而不仅仅是针对标题。
另外,为了确保索引的准确性和效率,要避免重复的标题或内容,因为重复的文字会导致索引冗余,增加检索的复杂度。
全文检索技术在各种应用场景中广泛应用,例如搜索引擎、文档管理系统、论坛、博客等。
它可以提高搜索的准确性和效率,帮助用户快速找到需要的信息。
lucene 原理

lucene 原理Lucene是一种开源的信息检索(IR)库,它提供了高效、可扩展的全文检索和索引功能。
下面是Lucene的一些详细原理解释:1. 倒排索引(Inverted Index):Lucene使用倒排索引的数据结构来实现全文检索。
传统的索引是从文档到词语的映射,而倒排索引则是从词语到文档的映射。
每个词语都对应一个或多个包含该词语的文档列表,方便快速地找到包含特定词语的文档。
2. 分词(Tokenization):在索引之前,Lucene会将文本分为一系列的词语或术语,这个过程称为分词。
分词的目的是将长文本拆分为可以被索引和搜索的离散单元。
Lucene提供多种分词器,以适应不同语言和需求。
3. 索引结构:Lucene使用多级索引结构以提高检索效率。
索引被划分为多个段(segments),每个段包含一个或多个文档。
每个段内部使用B树(B-tree)或前缀树(Trie)等数据结构来组织词项(term)和文档的映射关系。
4. 倒排列表(Inverted List):倒排列表是倒排索引的核心数据结构,用于存储每个词语在哪些文档中出现。
每个词语对应一个倒排列表,包含了所有出现该词语的文档ID及其相关的词频、位置和其他统计信息。
5. 相关性评分(Relevance Scoring):在执行搜索时,Lucene使用相关性评分算法来确定文档与查询的匹配程度。
默认的相关性评分算法是基于向量空间模型的TF-IDF(Term Frequency-Inverse Document Frequency),它考虑了词项在文档中出现的频率和在整个语料库中的重要性。
6. 查询解析和执行:Lucene使用查询解析器将用户的查询语句解析为内部查询对象。
查询对象由不同的查询类型(如词项查询、范围查询、布尔查询等)组成,并通过布尔运算来组合和匹配文档。
Lucene通过遍历倒排索引和倒排列表来执行查询,并根据相关性评分对文档进行排序。
知识点检索全文检索

知识点检索全文检索全文检索是一种用于快速检索文本内容的技术,通过将文本内容进行分词、索引和匹配来实现。
全文检索常用于文档、网页、邮件等场景,能够提高效率和准确性。
以下是全文检索的一些重要知识点:1.分词:全文检索首先需要将文本内容进行分词,将长句或段落划分成一个个独立的词。
分词的目的是将文本内容拆分成最小的检索单位,例如将句子“我爱中国”分词为“我”、“爱”和“中国”。
常见的中文分词算法有基于词典的正向最大匹配、逆向最大匹配、双向最大匹配,以及基于统计的基于互信息和条件随机场模型等。
2. 索引:全文检索需要将分词后的词语建立索引,以便于后续的检索和排序。
索引是一种数据结构,常见的索引结构有倒排索引(Inverted Index),它记录每个词语出现的位置和出现次数。
通过索引,可以快速定位包含特定词语的文档或网页。
3.倒排索引:倒排索引是全文检索中常用的索引结构,它将词语与包含该词语的文档或网页建立映射关系。
倒排索引对于每个词语,都记录了包含该词语的文档或网页的相关信息,如位置、权重等。
倒排索引可以极大地提高检索效率,例如通过倒排索引可以快速找到包含关键词“全文检索”的文档或网页。
4.布尔检索:布尔检索是一种基于逻辑运算的检索方法,可以通过布尔运算符(AND、OR、NOT)对检索词进行组合。
布尔检索的优点是简单直观,但对于包含大量文档的检索集合来说,布尔运算的结果可能过于宽泛或过于狭窄。
5.向量空间模型:向量空间模型是一种基于向量的文本表示方法,将文本表示为向量空间中的一个点。
每个词语在向量空间中都有一个对应的坐标,该坐标表示该词语在文本中出现的频率或权重。
通过计算文本之间的相似度,可以实现文本的相似性排序和推荐。
6. 相似度计算:在全文检索中,相似度计算是衡量检索结果与查询的相关性的重要指标。
常用的相似度计算方法有余弦相似度和Jaccard相似度等。
余弦相似度主要用于向量空间模型中,通过计算两个向量的夹角大小来表示相似度;Jaccard相似度主要用于布尔检索中,通过计算两个集合的交集与并集的比值来表示相似度。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程考试(论文) 作业(论文)题目: 全文检索中的索引策略 所修课程名称: Ajax 技术 修课程时间: 2011 年 03 月至 2011 年 05 月完成作业(论文)日期: 2011 年 06 月 评阅成绩: 评阅意见: 评阅教师签名: 年 月 日____计算机科学____系____08____级____软件工程____专业姓名____**____学号____2008090112____………………………………(密)………………………………(封)………………………………(线)………………………………基于HibernateSearch+Ajax全文检索中的索引策略**(四川文理学院计算机科学系,四川 ** 123456)摘要:本文主要讲解全文检索中的索引的种类、发展、实现原理。
索引文件有多种组织形式,其中以正排表、倒排表、后继数组模型以及互关联后继数组模型比较常用。
下面主要详细列举介绍Lucene倒排索引的组织形式以及实现原理。
关键词:索引;搜索引擎;全文检索;Lucene倒排索引;实现原理;Based on HibernateSearch + Ajax full text search theindex of the strategy**(Department of Computer Science, Sichuan University of Arts and Science, **123456,China)Abstract:this paper explained the index of the full text search the kinds, development and realize the principle. The index DuoZhong organization form, among them with are row watch, inverted table, subsequent array model and mutual association subsequent array model is commonly used. Below are the main detailed introduced Lucene inverted index the form of organization as well as the realization principle.Key words:index; Search engine; Full text search; Lucene inverted index;1引言使用索引可快速访问数据库表中的特定信息。
索引是对数据库表中一列或多列的值进行排序的一种结构,例如 employee 表的姓(name)列。
如果要按姓查找特定职员,与必须搜索表中的所有行相比,索引会帮助您更快地获得该信息。
索引是一个单独的、物理的数据库结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。
在搜索引擎实际的应用之中,有时需要按照关键字的某些值查找记录,所以我们是按照关键字建立索引,这个索引我们就称之为——倒排索引,而带有倒排索引的文件我们又称作——倒排索引文件,也可以叫它为——倒排文件,来实现快速的检索与高速的效率。
基金项目:四川**学院2011年科研项目(2011B02Z);2011年四川省教育厅重点项目(11ZA172)作者简介:**(1989-11-15),男,汉族,四川巴**市人,本科在读,研究方向为软件工程。
2 索引在中文检索中的位置及研究现状全文检索是指计算机索引程序通过扫描文章中的每一个词,给每一个词建立一个索引,指明该词在文章中出现的次数和位置,当用户查询时,检索程序就根据事先建立的索引进行查找,并将查找的结果反馈给用户的检索方式。
这个过程类似于通过字典中的检索字表查字的过程。
在上段全文检索的叙述中提到了索引,为什么要建立索引?索引对于全文检索到底意味这什么?在Otis Gospodnetic和Erik Hatcher的lucene in action一文中提到“在搜索引擎的所有概念中最为核心的概念就是索引,索引就是把原始的数据处理成一个有利于高效检索的数据形式。
”他们就为什么要进行索引给出了具体和形象的说明:“假如你需要在很大量的文中进行某个特定信息的检索,并且你想在非常短的时间内找到含有需要信息的文件,你会怎样写程序实现这些?最简单的方法是顺序扫描所有的文件寻找给定词和短语,但这种方式有一些缺点,其中最致命的是当文件很大时根本没有足够的空间来存储该文件,这就是为什么需要索引了,为了在大量文本中检索到所需要的信息,首先必须把源文本集转换成一另一格式的文件,这种格式的文件能够让你进行快速的检索,而不是只进行很慢的顺序扫描。
”这个转化的过程就是索引化,该过程输出的结果就是“索引气在上文中可以知道索引是全文检索的“心脏气下面的全文检索的模型结构图能够清晰的说明索引在全文检索中的地位。
下图即为全文检索的模型结构图:图1-1全文检索结构模型图全文检索系统是按照全文检索理论建立起来的用来提供全文检索服务的软件系统,一般来说,全文检索要具有建立索引和提供查询的功能。
从上图中可以看出,全文检索系统中最为关键的部分是全文检索引擎,各种应用程序都需要建立在这个检索引擎之上。
在检索引擎中可以看出索引引擎占据了核心的位置,他是整个检索效率的重要决定因素,一个全文检索应用的优异程度,根本上由全文检索引擎来决定。
而全文检索的效率主要是由一个索引引擎所决定的。
2.1全文检索索引器的结构在下图中可以看出一个索引器有三部分组成,第一部分是文本预处理模块,在该模块中针对给出的待索引的文本进行预处理,然后对经过处理的文本进行索引的建立,在索引建立后由于待查文档的改变要对索引尽心维护。
索引维护主要涉及的问题是:源文档增加时将新的索引附加到原来的索引上,当源文档改变时,将其相对应的索引文件更新,但某些文档不在需要时,也要将其相对应的索引文件删除。
具体的结构图见图2-1:图2-1索引器结构图2.2 全文检索索引器的基本功能一个中文全文检索的索引器应该实现三部分的功能。
第一部分是文本预处理,一般需要检索的文档成分比较复杂,需要用文本预处理将文档中的中文,数字,符号,以及西文分开并归类然后分别对其建立索引。
由于中文语言的复杂性在预处理这部分需要包括中文索引单位的选取,目前主流的有两类:一类是单字,一类是分词。
第二部分功能是创建索引,利用选定的索引数据结构对源文档遍历建立索引。
第三部分功能是实现索引的维护,包括索引删除,索引增加,索引更新。
3.几种常用索引以及实现原理3.1.1一般索引(正排索引)正排表是以文档的ID为关键字,表中记录文档中每个字的位置信息,查找时扫描表中每个文档中字的信息直到找出所有包含查询关键字的文档。
正排表结构如图3-1所示,这种组织方法在建立索引的时候结构比较简单,建立比较方便且易于维护;因为索引是基于文档建立的,若是有新的文档假如,直接为该文档建立一个新的索引块,挂接在原来索引文件的后面。
若是有文档删除,则直接找到该文档号文档对因的索引信息,将其直接删除。
但是在查询的时候需对所有的文档进行扫描以确保没有遗漏,这样就使得检索时间大大延长,检索效率低下。
由于正排表的工作原理非常的简单,但是由于其检索效率太低,几乎没有什么实用价值,所以在此不作详细介绍。
图3-1正排表结构图3.1.2倒排索引倒排表以字或词为关键字进行索引,表中关键字所对应的记录表项记录了出现这个字或词的所有文档,一个表项就是一个字表段,它记录该文档的ID和字符在该文档中出现的位置情况。
由于每个字或词对应的文档数量在动态变化,所以倒排表的建立和维护都较为复杂,但是在查询的时候由于可以一次得到查询关键字所对应的所有文档,所以效率高于正排表。
在全文检索中,检索的快速响应是一个最为关键的性能,而索引建立由于在后台进行,效率相对低一些,不会影响整个搜索引擎的效率。
倒排表的结构图如图3-2:图3一倒排表结构图倒排表的索引信息保存的是字或词后继数组模型、互关联后继数组模型条在文档内的位置,在同一篇文档内相邻的字或词条的前后关系没有被保存到索引文件内。
3.2 lucene倒排索引的实现原理3.2Lucene倒排索引原理a.Lucene是一个高性能的java全文检索工具包,它使用的是倒排文件索引结构。
该结构及相应的生成算法如下:0)设有两篇文章1和2文章1的内容为:Tom lives in Guangzhou,I live in Guangzhou too.文章2的内容为:He once lived in Shanghai.b.取关键词1)由于lucene是基于关键词索引和查询的,首先我们要取得这两篇文章的关键词,通常我们需要如下处理措施a.我们现在有的是文章内容,即一个字符串,我们先要找出字符串中的所有单词,即分词。
英文单词由于用空格分隔,比较好处理。
中文单词间是连在一起的需要特殊的分词处理。
b.文章中的”in”, “once” “too”等词没有什么实际意义,中文中的“的”“是”等字通常也无具体含义,这些不代表概念的词可以过滤掉c.用户通常希望查“He”时能把含“he”,“HE”的文章也找出来,所以所有单词需要统一大小写。
d.用户通常希望查“live”时能把含“lives”,“lived”的文章也找出来,所以需要把“lives”,“lived”还原成“live”e.文章中的标点符号通常不表示某种概念,也可以过滤掉在lucene中以上措施由Analyzer类完成经过上面处理后、文章1的所有关键词为:[tom] [live] [guangzhou] [i] [live] [guangzhou] 文章2的所有关键词为:[he] [live] [shanghai]2) 有了关键词后,我们就可以建立倒排索引了。
上面的对应关系是:“文章号”对“文章中所有关键词”。
倒排索引把这个关系倒过来,变成:“关键词”对“拥有该关键词的所有文章号”。
文章1,2经过倒排后变成关键词文章号guangzhou 1he 2i 1live 1,2shanghai 2tom 1通常仅知道关键词在哪些文章中出现还不够,我们还需要知道关键词在文章中出现次数和出现的位置,通常有两种位置:a)字符位置,即记录该词是文章中第几个字符(优点是关键词亮显时定位快);b)关键词位置,即记录该词是文章中第几个关键词(优点是节约索引空间、词组(phase)查询快),lucene中记录的就是这种位置。
加上“出现频率”和“出现位置”信息后,我们的索引结构变为:关键词文章号[出现频率] 出现位置guangzhou 1[2] 3,6he 2[1] 1i 1[1] 4live 1[2],2[1] 2,5,2shanghai 2[1] 3tom 1[1] 1以live 这行为例我们说明一下该结构:live在文章1中出现了2次,文章2中出现了一次,它的出现位置为“2,5,2”这表示什么呢?我们需要结合文章号和出现频率来分析,文章1中出现了2次,那么“2,5”就表示live在文章1中出现的两个位置,文章2中出现了一次,剩下的“2”就表示live是文章2中第2个关键字。