3、Elasticsearch-Term Dictionary和Term Index_term词典 term index-程序员宅基地

技术标签: elasticsearch  

Term Dictionary-Term词典

单词词典是倒排索引中非常重要的组成部分,它用来维护文档集合中出现过的所有单词的相关信息,同时用来记载某个单词对应的倒排列表在倒排文件中的位置信息。在支持搜索时,根据用户的查询词,去单词词典里查询,就能够获得相应的倒排列表,并以此作为后续排序的基础。

对于一个规模很大的文档集合来说,可能包含几十万甚至上百万的不同单词,能否快速定位某个单词,这直接影响搜索时的响应速度,所以需要高效的数据结构来对单词词典进行构建和查找,常用的数据结构包括哈希加链表结构树形词典结构

1、哈希加链表

主体部分是哈希表,每个哈希表项保存一个指针,指针指向冲突链表,在冲突链表里,相同哈希值的单词形成链表结构。之所以会有冲突链表,是因为两个不同单词获得相同的哈希值,如果是这样,在哈希方法里被称做是一次冲突,可以将相同哈希值的单词存储在链表里,以供后续查找。
在这里插入图片描述

在建立索引的过程中,词典结构也会相应地被构建出来。比如在解析一个新文档的时候,对于某个在文档中出现的单词T,首先利用哈希函数获得其哈希值,之后根据哈希值对应的哈希表项读取其中保存的指针,就找到了对应的冲突链表。如果冲突链表里已经存在这个单词,说明单词在之前解析的文档里已经出现过。如果在冲突链表里没有发现这个单词,说明该单词是首次碰到,则将其加入冲突链表里。通过这种方式,当文档集合内所有文档解析完毕时,相应的词典结构也就建立起来了。

在响应用户查询请求时,其过程与建立词典类似,不同点在于即使词典里没出现过某个单词,也不会添加到词典内。以图7为例,假设用户输入的查询请求为单词3,对这个单词进行哈希,定位到哈希表内的2号槽,从其保留的指针可以获得冲突链表,依次将单词3和冲突链表内的单词比较,发现单词3在冲突链表内,于是找到这个单词,之后可以读出这个单词对应的倒排列表来进行后续的工作,如果没有找到这个单词,说明文档集合内没有任何文档包含单词,则搜索结果为空。

2、树形结构

B树(或者B+树)是另外一种高效查找结构,下图是一个 B树结构示意图。B树与哈希方式查找不同,需要字典项能够按照大小排序(数字或者字符序),而哈希方式则无须数据满足此项要求。
B树形成了层级查找结构,中间节点用于指出一定顺序范围的词典项目存储在哪个子树中,起到根据词典项比较大小进行导航的作用,最底层的叶子节点存储单词的地址信息,根据这个地址就可以提取出单词字符串。(就类似于我们要找某个单词B… 最顶层的假如是A,那么我们就可以很快地知道B是在左边还是右边)
在这里插入图片描述

二、Term Index

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_37862824/article/details/122828339

智能推荐

Ubuntu 使alias永久生效_ubuntu alias不保存-程序员宅基地

仅仅使用alias设定命令别名再次开机后就失效了,在此使用配置环境变量文件的方式使得别名永久生效。home文件中有一个.bashrc的配置文件,里面存储了alias别名。首先打开该文件sudo gedit ~/.bashrc打开后发现有很多alias,找到#some more ls aliases这一行,在他的下边添加你的alias命令。如:alias opendir='nautilus'保存_ubuntu alias不保存

signature=b2f9171fa2897cefe08a669efaf58433,Genomic Responses during Acute Human Anaphylaxis Are Char...-程序员宅基地

摘要:Systemic spread of immune activation and mediator release is required for the development of anaphylaxis in humans. We hypothesized that peripheral blood leukocyte (PBL) activation plays a key role...

深入NXP蓝牙SDK开发(x)---深挖BLE蓝牙协议栈配对过程(3)_密钥分发_enckey idkey sign-程序员宅基地

深挖蓝牙BLE配对过程系列文章其三:密钥分发;记录笔者查阅大量文章,努力翻译Core_v4.2以上版本标准的学习成果;介绍低功耗蓝牙BLE协议栈配对连接过程系列文章,本文仅为其中一小部分,带自己深入探讨蓝牙协议栈_enckey idkey sign

webview显示String类型的html文本_web 调用文本显示-程序员宅基地

效果图:做法:xml: android:id="@+id/plan_open_html" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_below="@+id/mail_open_body_web 调用文本显示

数据结构与算法分析 c++11 伸展树(splay tree)_c++ stl splay tree-程序员宅基地

一、什么是伸展树(splay tree)伸展树(splay tree)是特殊的二叉查找树,它通过将访问过的节点旋转移到根节点处,来降低再次访问的时间。它保证从空树开始任意连续M次对树的操作最多花费O(MlogN)时间。 普通AVL树的旋转和伸展树的旋转不同之处: AVL树的旋转操作目的是缩小左右子树的高度差,它是全局调控即目的是缩小整棵树的_c++ stl splay tree

Do not use built-in or reserved HTML elements as component id等等vue warn问题-程序员宅基地

vue开发项目过程中,会出现类似于:Do not use built-in or reserved HTML elements as component id ······的报错,why?报错截图示下:是因为在本地项目对应的文件中,出现了不应该有的命名方式:如下:采用正确命名,修改上述代码,即可消除报错。...

随便推点

Vagrant + VMBox 踩坑记录-程序员宅基地

VMBox 开机不能跑 Vagrant脚本项目正常使用了一小段时间,然后重启电脑。按照以往的习惯,既然 vagrant 配置好了,就使用 box 开虚拟机。然而,不使用 vagrant up 的命令启动方式开启虚拟机, 他不会跑脚本!!!因为 vmbox 才不会管你 vagrant 的事情呢。1.应用启动 redis 不能使用却无任何报错在知道这个之前,项目稍微调整了下。但换汤不换药的调整不应出现问题,重点在于现在一直跑都不会报 redis 连接失败的异常!所以一直没去怀疑 redis 服务出了问

[BZOJ 2789]POI2012 Letters-程序员宅基地

water。。。。很明显我们把相同的字母相对位置弄出来后,前后同一位置的一定是对应的,否则一定不优。那么问题就变成两两交换将一个位置的数换到另一位置,裸树状数组。。。老样子,贴代码#include #include #include #include using namespace std;#define lowbit(x) ( (x)&(-(x)) )const i

django HttpResponse的用法-程序员宅基地

一、传json字典def back_json(rquest): #JsonResponse父类是HttpResponse,原码里调用了json.dumps() from django.http import JsonResponse back_msg = {'name':name,'age':123} return JsonResponse(back..._httpresponse传字典

vue-xlsx-table实现批量导入表格,将数据提取后传给后台保存-程序员宅基地

1、npm install vue-xlsx-table --save2、在main.js中import vueXlsxTable from 'vue-xlsx-table';Vue.use(vueXlsxTable, {rABS: false});3、在页面中<vue-xlsx-table @on-select-file="selectExcel" style="margin-...

URAL 1053 Pinocchio_天涯浪子_新浪博客-程序员宅基地

[成绩]IDDateAuthorProblemLanguageJudgement resultTest #Execution timeMemory used288457009:27:414 Jan 2010bake1053C++Accepted0.015197 KB288389715:13:263 Jan 2010bake1...

HackTools————2.简单FTP网络扫描-程序员宅基地

简易FTP扫描器思路:(1)首先通过使用python的socket模块获取banner信息(2)将banner信息与存在漏洞的版本的banner信息进行对比,如果有符合的那么说明就存在漏洞,否则不存在。代码:#encoding:utf-8import socket #导入socket数据包so..._hacktools