elasticsearch-倒排索引原理
2018-07-05 16:44
274 查看
倒排索引
Elasticsearch 使用一种称为 倒排索引 的结构,它适用于快速的全文搜索。一个倒排索引由文档中所有不重复词的列表构成,对于其中每个词,有一个包含它的文档列表。
例如,假设我们有两个文档,每个文档的
content域包含如下内容:
-
The quick brown fox jumped over the lazy dog
-
Quick brown foxes leap over lazy dogs in summer
为了创建倒排索引,我们首先将每个文档的
content域拆分成单独的 词(我们称它为
词条或
tokens),创建一个包含所有不重复词条的排序列表,然后列出每个词条出现在哪个文档。结果如下所示:
Term Doc_1 Doc_2 ------------------------- Quick | | X The | X | brown | X | X dog | X | dogs | | X fox | X | foxes | | X in | | X jumped | X | lazy | X | X leap | | X over | X | X quick | X | summer | | X the | X | ------------------------
现在,如果我们想搜索
quick brown,我们只需要查找包含每个词条的文档:
Term Doc_1 Doc_2 ------------------------- brown | X | X quick | X | ------------------------ Total | 2 | 1
两个文档都匹配,但是第一个文档比第二个匹配度更高。如果我们使用仅计算匹配词条数量的简单 相似性算法 ,那么,我们可以说,对于我们查询的相关性来讲,第一个文档比第二个文档更佳。
但是,我们目前的倒排索引有一些问题:
-
Quick
和quick
以独立的词条出现,然而用户可能认为它们是相同的词。 -
fox
和foxes
非常相似, 就像dog
和dogs
;他们有相同的词根。 -
jumped
和leap
, 尽管没有相同的词根,但他们的意思很相近。他们是同义词。
使用前面的索引搜索
+Quick +fox不会得到任何匹配文档。(记住,
+前缀表明这个词必须存在。)只有同时出现
Quick和
fox的文档才满足这个查询条件,但是第一个文档包含
quick fox,第二个文档包含
Quick foxes。
我们的用户可以合理的期望两个文档与查询匹配。我们可以做的更好。
如果我们将词条规范为标准模式,那么我们可以找到与用户搜索的词条不完全一致,但具有足够相关性的文档。例如:
-
Quick
可以小写化为quick
。 -
foxes
可以 词干提取 --变为词根的格式-- 为fox
。类似的,dogs
可以为提取为dog
。 -
jumped
和leap
是同义词,可以索引为相同的单词jump
。
现在索引看上去像这样:
Term Doc_1 Doc_2 ------------------------- brown | X | X dog | X | X fox | X | X in | | X jump | X | X lazy | X | X over | X | X quick | X | X summer | | X the | X | X ------------------------
这还远远不够。我们搜索
+Quick +fox仍然 会失败,因为在我们的索引中,已经没有
Quick了。但是,如果我们对搜索的字符串使用与
content域相同的标准化规则,会变成查询
+quick +fox,这样两个文档都会匹配!
https://blog.csdn.net/chuan442616909/article/details/55100757
相关文章推荐
- elasticsearch-倒排索引原理
- elasticsearch核心知识--33.倒排索引核心原理以及normalization(标准化-时态转换,复数,同义词,大小写等)
- ElasticSearch28:初识搜索引擎_倒排索引核心原理快速揭秘
- elasticsearch-分布式索引原理
- [ElasticSearch2.x]原理之分布式搜索
- Lucene倒排索引原理(转)
- Elasticsearch学习总结--原理篇
- Elasticsearch索引原理
- elasticsearch核心知识---52.倒排索引组成结构以及实现TF-IDF算法
- elasticsearch中filter执行原理深度剖析(bitset机制与caching机制)
- 1.搜索引擎的历史,搜索引擎起步,发展,繁荣,搜索引擎的原理,搜索技术用途,信息检索过程,倒排索引,什么是Lucene,Lucene快速入门
- Lucene倒排索引原理
- Elasticsearch索引原理
- 第九篇 elasticsearch的document数据路由原理
- Elasticsearch原理
- elasticsearch核心知识--25.剖析document数据路由原理和document增删改内部原理
- elasticsearch核心知识--29._multi-index&multi-type搜索模式解析以及搜索原理
- Elasticsearch学习随笔(一)--原理理解与5.0核心插件部署过程
- 第三百六十一节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)倒排索引
- Lucene倒排索引原理(转)