3、Elasticsearch-Term Dictionary和Term Index_elasticsearch term dictionary-程序员宅基地

技术标签: 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

智能推荐

windows上如何安装jq_windows jq-程序员宅基地

文章浏览阅读3.6k次。jq介绍- jq是一款非常强大的用来将复杂的数据解析成json格式的工具。具体作用及用法官网有详细介绍。- 官网地址:https://stedolan.github.io/jq/Windows上安装jq- 如果要在Windows上顺利的使用jq,需要先安装chocolatey。- 以管理员身份待开cmd窗口,输入@"%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe" -NoProfile -InputFormat None _windows jq

钉钉官方接口调用过程_钉钉企业内部应用回调怎么弄-程序员宅基地

文章浏览阅读6.5k次,点赞5次,收藏24次。文章目录钉钉官方接口调用过程获取企业内部应用的访问凭证accessToken根据员工的企业UserId获取钉钉官方的unionId唯一性idUserId的获取方法appKey和appSecret的获取方法易错点钉钉官方接口调用过程获取企业内部应用的访问凭证accessToken首先需要引入依赖,如下图:钉钉开发者调用钉钉官方的接口的时候,一定要先要进行认证,什么意思呢?就是必须要告诉钉钉我是一个企业开发者,我有权限调用你的接口,那具体怎么认证呢?企业开发者通常可以在钉钉里面创建应用,我们需要把我们_钉钉企业内部应用回调怎么弄

Ubuntu 8.04嵌入式交叉编译环境arm-linux-gcc搭建过程图解-程序员宅基地

文章浏览阅读136次。Linux版本:Ubuntu8.04内核版本:Linux 2.6.24交叉编译器版本:arm-linux-gcc-3.4.1交叉编译器下载链接:https://share.weiyun.com/5oxlS6X(密码:36R7)前言1、搭建交叉编译环境安装、配置交叉编译工具链。在该环境下编译出嵌入式Linux系统所需的操作系统、应用程序等,然后再上传到目标机上。2、交..._arm-linux-gcc 8

vm虚拟机镜像转换成KVM虚拟机_vm exsi的虚拟机转换成kvm-程序员宅基地

文章浏览阅读1.2k次。众所周知,VMware workstations是一个收费的虚拟机软件,虽然对于个人使用,网上有许多盗版的license可以使用,但是对于一个大的公司来说,在商业环境下,一定不能使用盗版的license,而KVM虚拟机软件是一个免费的软件,在商业应用环境下,完全可以作为一个不错的可以替代VMware workstations的解决方案。但是对于很多已经运行在了VMware workstation的虚拟机镜像来说,要是想避免收费,可以把VMware workstation的虚拟机vmdk的格式转换成qcow_vm exsi的虚拟机转换成kvm

C#接口与继承的区别_c#继承和接口的区别-程序员宅基地

文章浏览阅读3k次。类定义新的数据类型以及这些新的数据类型进行相互操作的方法定义方式: class Cat { } class Cat:object { }C#中所有的类都是默认由object类派生来的,显示指定或者省略效果是一样的,所以上面的两个例子是完全相同的。C#中类包括:抽象类、密封类、非抽象类abstract:表示修饰的类不完整,也就是抽象类,_c#继承和接口的区别

db2 各版本的系统要求_db2 支持的操作系统-程序员宅基地

文章浏览阅读6.4k次。DB2 服务器的安装需求(Windows)要安装 DB2 UDB 服务器,必须满足下列操作系统、软件、硬件和通信需求:操作系统需求|有关最新的操作系统信息,请参阅 http://www.ibm.com/software/data/db2/udb/sysreqs.html。DB2 UDB 工作组服务器版在下列操作系统上运行:带有 Service Pack 6a 或更新_db2 支持的操作系统

随便推点

Qt调用FFmpeg命令录屏_linux qt 录屏 github-程序员宅基地

文章浏览阅读3.1k次,点赞3次,收藏28次。//列出音视频设备ffmpeg -list_devices true -f dshow -i dummy//录屏命令ffmpeg -f gdigrab -i desktop -f dshow -i audio="麦克风 (High Definition Audio 设备)" -pix_fmt yuv420p -vcodec libx264 -acodec aac -s 1440x900 ..._linux qt 录屏 github

将java swing写的用程序打包exe可执行程序_java swing能生成exe吗-程序员宅基地

文章浏览阅读1.5k次。将java swing写的用程序打包exe可执行程序原文地址:https://www.cnblogs.com/ssh2/p/3463199.html下面的文章是介绍如何将自己编写的swing应用程序打包为.exe的可执行程序,进而编译为.exe的安装程序。相信有这样经历的朋友肯定可以理解我为什么还要将已经编译好的.exe程序更进一步的编译为安装程序,因为一般而言本机打包的是基本不会出现什么..._java swing能生成exe吗

C++之指针探究(十九):typedef和const指针_typedef int* pointer; pointer()-程序员宅基地

文章浏览阅读185次。typedef和const指针 typedef int* pointer; const pointer p1; 相当于是int* const p1; typedef int* pointer; pointer const p1; 相当于是int* const p1; typedef const int* pointer; pointer p1; 相当于是const int* p1;_typedef int* pointer; pointer()

[Vivado 12-1345] Error(s) found during DRC. Bitgen not run.(2018.3版本)_[vivado_tcl 4-78] error(s) found during drc. opt_d-程序员宅基地

文章浏览阅读1.5w次,点赞17次,收藏43次。NSTD #1 Critical Warning 19 out of 19 logical ports use I/O standard (IOSTANDARD) value ‘DEFAULT’, instead of a user assigned specific value. This may cause I/O contention or incompatibility with the ..._[vivado_tcl 4-78] error(s) found during drc. opt_design not run.

【数据结构】:有序树和无序树-程序员宅基地

文章浏览阅读1.3w次,点赞7次,收藏22次。其实有序树和无序树的概念很简单,我们来康康:有序树的定义:若将树中每个结点的各子树看成是从左到右有次序的(即不能互换),则称该树为有序树(Ordered Tree)无序树的定义:若将树中每个结点的各子树从左到右是没有次序的(即可以互换),则称该树为无序树比如我们有这样的例子,在Linux操作系统当中,文件都是以一定的次序排列的,比如在同一个文件夹下的文件,他们一定会以一定的顺序进行排列,比如按照数字的大小顺序或者按照英文字母的顺序进行排列,如下图所示:我们可以..._有序树

软件无线电原理深入解析_gpp sdr技术原理解析-程序员宅基地

文章浏览阅读4k次,点赞9次,收藏41次。SDR技术原理解析 2016/12/03   本博客通俗地介绍SDR的技术原理。先简单介绍SDR的概念,SDR系统的分类,基于GPP的SDR系统。接着详细介绍SDR系统原理,最后再以SDR LTE系统为例进一步解析SDR系统的工作流程。 一 软件无线电(SDR)概念   软件无线电,即Software Defined Radio,SDR。通俗来讲,SDR就是基于通用的硬件平台上用软件来实现各种通信模块。   概念中有两个关键词,“通用硬件平台”和“软件”。..._gpp sdr技术原理解析