首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何设计一个搜索引擎

https://www.cnblogs.com/ysocean/p/8004211.html ③、B+树 上面说的树每个节点都最多只能有两个子节点,有些情况下,数据量特别大,会导致树的高度很大,这会导致我们查找某个数据需要多次...⑤、通过临时索引创建倒排索引 ⑥、记录单词编号在倒排索引文件的偏移位置 帮助我们快速地查找某个单词编号在倒排索引存储的位置,进而快速地从倒排索引读取单词编号对应的网页编号列表。...然后对这 k 个单词进行纠错模型判断: ②、纠错完成之后,我们拿这 k 个单词,去 term_id.bin 对应的散列表查找对应的单词编号。...经过这个查询之后,我们得到了这 k 个单词对应的单词编号。 ③、我们拿这 k 个单词编号,去 term_offset.bin 对应的散列表查找每个单词编号在倒排索引文件的偏移位置。...④、我们拿这 k 个偏移位置,去倒排索引(index.bin)查找 k 个单词对应的包含它的网页编号列表。经过这一步查询之后,我们得到了 k 个网页编号列表

2.4K10

一文搞懂正则表达式

除了刚刚说的普通的字符串的查找之外,有时候我们还需要查找符合某个规则的文本;比如我们想找出字符串中所有的数字,而任意数字在正则可以用 \d 来表示,它表示 0~9 这十个数字。...我们可以把原字符大概的分成这么几类,有基础常用的、特殊的空白符、表示某个范围的、表示边界的、表示次数的量词;原字符虽然非常的多但如果我们按照分类去理解记忆,效果就会好很多。...范围原字符学习到了量词我们就可以使用 /d{11} 来匹配所有的手机号,但是我们要明白这个范围比较大有一些不是手机号的也能匹配上,比如说 11 个 0 这个时候我们就需要在这一个特殊的范围内进行查找我们符合我们要求的数字...] 来表示;另外括号我们可以用 - 来表示范围比如说 [a-z] 可以表示所有的小写字母;如果括号的第一个是脱字符(^)它可以表示非,那么就表示不能出现里面的任何一个单个元素。...案例实践我们回到今天开头提出的问题也就是如何将文本重复出现的单词替换成单个单词。在这里我们可以分成两步来操作,首先我们需要查找出相关的内容然后再对其进行替换。

13710
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    史上最全VIM使用手册

    : 编辑模式粘贴 p:缓冲区的内容如果为整行,则粘贴在当前光标所在行的下方;否则,则粘贴至当前光标所在处的后方; P:缓冲区的内容如果为整行,则粘贴在当前光标所在行的上方;否则,则粘贴至当前光标所在处的前方...y:地址定界后接d实现复制该定界范围内的行 c:地址定界后接d实现替换该定界范围内的行并且切换为输入模式 w /PATH/TO/SOMEFILE:将范围内的文本保存至指定的文件...; r /PATH/FROM/SOMEFILE:将指定的文件的文本读取并插入至指定位置; (2) 查找 模式匹配查找 /PATTERN:从当前光标所在处向文件尾部查找能够被当前模式匹配的所有字符串...s/要查找的内容/替换为的内容/修饰符 要查找的内容:可使用正则表达式; 替换为的内容:不能使用正则表达式,但可以引用; 如果“要查找的内容”部分在模式中使用分组符号:在“替换为的内容...”中使用后向引用; 直接引用查找模式匹配到的全部文本,要使用&符号; 修饰符: i:忽略大小写; g:全局替换,意味着一行如果匹配到多次,则均替换;

    2.8K10

    每日两题 T21

    翻转字符串里的单词[1] 描述 给定一个字符串,逐个翻转字符串的每个单词。...此时如果版本描述文件(npm-shrinkwrap.json 或 package-lock.json)中有该模块信息,则已之为准,如果没有则从仓库获取。...如 packaeg.json 某个包的版本是 ^1.1.0,则会获取符合 1.x.x 形式的最新版•获取模块实体。...上一步获取了压缩包地址(resolved 字段),npm 会以此地址检查本地缓存,若有就直接拷贝,没有则从仓库下载•查找模块依赖,若有依赖则返回第1步,若没有则停止。...每个 semver 都对应一段版本允许范围如果两个模块的版本允许范围存在交集,那么就可以得到一个兼容版本,而不必版本号完全一致,这可以使更多冗余模块在 dedupe 过程中被去掉。

    41930

    六、python学习笔记-模块-正则模块

    # 正则模块 """ 1、用于实现正则表达式功能 """ 主要方法 # 引用模块 import re # 查找所有,返回值是列表,将所有匹配的内容放入列表 # 格式re.findall(''要查找的内容..., '在哪个字符串查找') r1 = re.findall('abc', 'abcsssabcjjjabc') print(r1) # 查找第一个,找到后结束,返回一个对象包括位置和匹配的字符串 #...2、正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。...:重复匹配,重复前面字符多次(0次或1次) ‘{}’:重复匹配,重复前面字符多次(重复几次自己定义,也可以指定范围) 字符集‘[]’:代表范围,并取消里面元字符的功能...,单词的开始或结束 ‘()’:分组,将‘()’作为一个整体 ‘|’:或关系 3、特殊的存在 r'':表示该字符串的内容在python解释器没有特殊含义

    25221

    shell 文本操作命令

    文件保存与另存为 保存文件  保存对vi编辑器已打开文件的修改 :w 另存为文件 将vi编辑器的内容另存为指定文件名 :w myfile 退出vi编辑器的多种方法: 未修改退出 没有对vi编辑器打开的文件进行修改...,或已对修改进行了保存,直接退出vi编辑器 :q 保存并退出 对vi编辑器的文件进行保存并退出vi编辑器 :wq 不保存退出 放弃对文件内容的修改,并退出vi编辑器 :q! ...,并粘贴到光标当前的位置(不覆盖文件已有的内容)  字符串查找操作  命令功能 /word从上而下在文件查找字符串“word”  ?...word 从下而上在文件查找字符串“word” n定位下一个匹配的被查找字符串  N定位上一个匹配的被查找字符串 字符串替换操作  命令功能 :s/old/new 将当前行查找到的第一个字符“old...” 串替换为“new” :s/old/new/g 将当前行查找到的所有字符串“old” 替换为“new” :#,#s/old/new/g 在行号“#,#”范围内替换所有的字符串“old”为“new”

    95620

    字符串查找----R向单词查找

    单词查找树的数据结构就是一种树型结构,它由字符串键中所有字符构造而成,允许使用被查找的字符进行查找。...结点的值val可以是空,也可以是符号表某个键所关联的值。具体来说,将某个键所关联的值保存在这个键最后一个字母所对应的结点中。 查找操作: 单词查找树以被查找的键的字符为导向的。...如果该结点含有某个非空的链接指向某个子结点,那么不需要进行其他操作;如果它的所有链接都为空,则从删去这个结点。如果删去它使得它的父结点的链接也全部空,就继续删去它的父结点,依此类推。...在单词查找插入或查找一个键时,访问数组的次数最多为键的长度加一。 字母表的大小为R,在一棵由N个键构造的单词查找,未命中查找平均所需检查的数量为~(logR)N。...一棵单词查找链接总数在RN到RNw之间,其中w为键的平均长度。

    1.2K00

    技术分享 | Centos下 Vim快捷键操作命令大全

    其他 vim在保存之前不会对文件做实际的修改,只是加载到缓冲区,对文件的编辑其实是对缓冲区的编辑,直到:w时才会存入物理文件。 ? 退出编辑器 ? 查找替换 ? 复制粘贴 ?...VIM中常用的替换模式总结 1,简单替换表达式 替换命令可以在全文中用一个单词替换另一个单词: :%s/four/4/g “%” 范围前缀表示在所有行执行替换。...最后的 “g” 标记表示替换行的所有匹配点。如果仅仅对当前行进行操作,那么只要去掉%即可 如果你有一个象“thirtyfour” 这样的单词,上面的命令会出错。...用“\>” 来解决这个问题: :%s/\/4/g 如果你在编码,你可能只想替换注释的 “four”,而保留代码的。...\{3,} 3,4,5,等等 \{0,1} 0 或 1,同 \= \{0,} 0 或 更多,同 * \{1,} 1 或 更多,同 \+ \{3} 3 5,多选一匹配 在一个查找模式

    1.1K100

    linux vim怎么退出编辑模式_shell退出vi编辑器

    文件保存与另存为 保存文件 保存对vi编辑器已打开文件的修改 :w 另存为文件 将vi编辑器的内容另存为指定文件名 :w myfile 退出vi编辑器的多种方法 未修改退出 没有对vi编辑器打开的文件进行修改...,或已对修改进行了保存,直接退出vi编辑器 :q 保存并退出 对vi编辑器的文件进行保存并退出vi编辑器 :wq 不保存退出 放弃对文件内容的修改,并退出vi编辑器 :q!...(不覆盖文件已有的内容) 字符串查找操作 命令功能 /word从上而下在文件查找字符串“word” ?...word 从下而上在文件查找字符串“word” n定位下一个匹配的被查找字符串 N定位上一个匹配的被查找字符串 字符串替换操作 命令功能 :s/old/new 将当前行查找到的第一个字符“old”...串替换为“new” :s/old/new/g 将当前行查找到的所有字符串“old” 替换为“new” :#,#s/old/new/g 在行号“#,#”范围内替换所有的字符串“old”为“new” :%

    14.2K20

    IDEA + Vim,竟可以这么牛逼!!

    set so=n,则跳转到第n行) L跳转到屏幕底端(如果设置了set so=n,则跳转到倒数第n行) M跳转到屏幕中间 f或F跳转到本行某个字符,小写f向右查找,大写F向左查找。...用;或,在匹配间切换 t或T跳转到本行某个字符之前,小写t向右查找,大写T向左查找。用;或,在匹配间切换 /正则表达式跳转到下一个匹配。用n或N在匹配间切换。 ?正则表达式跳转到上一个匹配。...在Idea录制宏时,如果触发了代码自动完成,在自动完成列表启动的状态输入的字符不会被记录。...所以我们需要了解更多光标移动操作 [n]f{word}f用来查找在当前行当前光标后是否存在某个字符{word}如果存在则将光标移动过去 $ | ^$跳转到行尾^跳转到行首 %括号匹配跳转() [] {}...zz改变窗口的整体位置,将当前光标所在处 移动到窗口中部 下面是 gif 演示 [n]f{word}f用来查找在当前行当前光标后是否存在某个字符{word}如果存在则将光标移动过去。

    2.7K10

    笔记·正则表达式和re库

    可能需要匹配列表的特定字符组。例如,可能需要查找用数字表示的章节标题(Chapter 1、Chapter 2 等等)。...如果它位于要匹配的字符串的开始,它在单词的开始处查找匹配项。如果它位于字符串的结尾,它在单词的结尾处查找匹配项。...上面的句子很显然有多个重复的单词如果能设计一种方法定位该句子,而不必查找每个单词的重复出现,那该有多好。...下面的正则表达式包含范围表达式,该范围表达式等效于上面显示的括号列表。 /Chapter [1-5]/ 当以这种方式指定范围时,开始值和结束值两者都包括在范围内。...-~] 若要查找不在列表范围内的所有字符,请将插入符号 (^) 放在列表的开头。如果插入字符出现在列表的其他任何位置,则它匹配其本身。

    99330

    搜索引擎-倒排索引基础知识

    图3-5是一个相对复杂些的倒排索引,与图3-4的基本索引系统比,在单词对应的倒排列表不仅记录了文档编号,还记载了单词频率信息(TF),即这个单词某个文档的出现次数,之所以要记录这个信息,是因为词频信息在搜索结果排序时...单词词典 单词词典是倒排索引中非常重要的组成部分,它用来维护文档集合中出现过的所有单词的相关信息,同时用来记载某个单词对应的倒排列表在倒排文件的位置信息。...之所以会有冲突链表,是因为两个不同单词获得相同的哈希值,如果是这样,在哈希方法里被称做是一次冲突,可以将相同哈希值的单词存储在链表里,以供后续查找。...之后可以读出这个单词对应的倒排列表来进行后续的工作,如果没有找到这个单词,说明文档集合内没有任何文档包含单词,则搜索结果为空。...B树形成了层级查找结构,中间节点用于指出一定顺序范围的词典项目存储在哪个子树,起到根据词典项比较大小进行导航的作用,最底层的叶子节点存储单词的地址信息,根据这个地址就可以提取出单词字符串。

    60310

    vim配置即.vimrc文件的配置及vim操作技巧

    比如,将SQL语句从FROM至分号部分的所有等号(=)替换为不等号(): :/FROM/,/;/s/=//g 在可视化模式下,首先选择替换范围, 然后输入:进入命令模式,就可以利用s命令在选中的范围内进行文本替换...查找与替换 7.1 查找 /something: 在后面的文本查找something。 ?something: 在前面的文本查找something。...g的含义是如果一个模式在一行多次出现,则这一行也在结果多次出现。j的含义是grep结束后,结果停在第j项,默认是停在第一项。...提示∶如果查找已经到达文件末尾,查找会自动从文件头部继续查找。...dir 查看您的目录列表内容。 ---> 请注意∶如果退出 VIM 然后在以文件名 TEST 为参数进入,那么该文件内容应该同您保存时的文件内容是完全一样的。   5. 现在您可以通过输入 :!

    3.9K10

    ElasticsSearch 之 倒排索引

    倒排列表(PostingList):倒排列表记载了出现过某个单词的所有文档的文档列表单词在该文档中出现的位置信息,每条记录称为一个倒排项(Posting)。...根据倒排列表,即可获知哪些文档包含某个单词。...单词词典 单词词典是倒排索引中非常重要的组成部分,它用来维护文档集合中出现过的所有单词的相关信息,同时用来记载某个单词对应的倒排列表在倒排文件的位置信息。...之所以会有冲突链表,是因为两个不同单词获得相同的哈希值,如果是这样,在哈希方法里被称做是一次冲突,可以将相同哈希值的单词存储在链表里,以供后续查找。 ?...B树形成了层级查找结构,中间节点用于指出一定顺序范围的词典项目存储在哪个子树,起到根据词典项比较大小进行导航的作用,最底层的叶子节点存储单词的地址信息,根据这个地址就可以提取出单词字符串。 ?

    68210

    Linux 之 Vim 编辑器从基础到大成使用

    page front) ctrl+e #编辑窗口中的文件内容整体上移一行 ctrl+y #编辑窗口中的文件内容整体下移一行 '' #此命令相当有用, 它移动光标到上一个标记处, 比如用gd * 等查找某个单词后...; #:set ignorecase 查找到以后,再输入n 查找下一个匹配处, 输入N 反方向查找(不区分大小写) gd #查找与光标所在单词相匹配的单词, 并将 `光标停留的单词`在文档的非注释段第一次出现这个单词的地方.... *(#) #当光标停留在某个单词上时, 输入这条命令表示查找与该单词匹配的下(上)一个单词....(.vimrc)配置的所有插件 :BundleInstall :安装列表全部插件 :BundleInstall!...:更新列表全部插件 :BundleSearch xx:查找xx插件 :BundleClean:清除列表没有的插件 #第三步:安装示例,在这里演示一下如何安装NERDTree插件,该插件显示一个目录树

    2K10

    正则表达式

    正则表达式 正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个取出符合某个条件的子串等。...如果查找字符串的 * 符号,则需要对 * 进行转义,即在其前加一个 : yanko\*ob 匹配 yanko*ob 。 许多元字符要求在试图匹配它们时特别对待。...因此,它应用于整个范围表达式,在本例,只指定从 0 到 9 的数字(包括 0 和 9),如果要控制限定符的范围,可以使用 () 来保证子表达式。...下面的表达式匹配单词 Chapter 的开头三个字符,因为这三个字符出现在单词边界后面: \bCha \b 字符的位置是非常重要的。如果它位于要匹配的字符串的开始,它在单词的开始处查找匹配项。...如果它位于字符串的结尾,它在单词的结尾处查找匹配项。

    86710

    Vim编辑器基础入门

    page front) ctrl+e #编辑窗口中的文件内容整体上移一行 ctrl+y #编辑窗口中的文件内容整体下移一行 '' #此命令相当有用, 它移动光标到上一个标记处, 比如用gd * 等查找某个单词后...; #:set ignorecase 查找到以后,再输入n 查找下一个匹配处, 输入N 反方向查找(不区分大小写) gd #查找与光标所在单词相匹配的单词, 并将 `光标停留的单词`在文档的非注释段第一次出现这个单词的地方.... *(#) #当光标停留在某个单词上时, 输入这条命令表示查找与该单词匹配的下(上)一个单词....(.vimrc)配置的所有插件 :BundleInstall :安装列表全部插件 :BundleInstall!...:更新列表全部插件 :BundleSearch xx:查找xx插件 :BundleClean:清除列表没有的插件 #第三步:安装示例,在这里演示一下如何安装NERDTree插件,该插件显示一个目录树

    1.7K20

    Linux——常用命令(2)

    统计文件的行数\单词数\字符数  -l 行数  -w 单词数  -c 字符数 du 统计文件和目录的大小  -s 汇总显示大小 -h 易读形式显示 ----  2.目录基本操作命令 tree 树状图列出目录的内容...,也可以将某个目录及其下属的所有文件及其子目录均删除掉。...               P 大写    粘贴到光标位置处之前  8、查找 /word     从上而下在文件查找字符串“word”                ?...定位上一个匹配的被查找字符串  9、取消操作 u  按一次取消最近的一次操作                           多次重复按u键,恢复已进行的多步操作                      ...filesystems 在当前文件读入其他文件内容  替换 :s /old/new 将当前行查找到的第一个字符“old” 串替换为“new”  :s /old/new/g 将当前行查找到的所有字符串

    24020

    倒排索引

    图5是一个相对复杂些的倒排索引,与图4的基本索引系统比,在单词对应的倒排列表不仅记录了文档编号,还记载了单词频率信息(TF),即这个单词某个文档的出现次数,之所以要记录这个信息,是因为词频信息在搜索结果排序时...单词词典   单词词典是倒排索引中非常重要的组成部分,它用来维护文档集合中出现过的所有单词的相关信息,同时用来记载某个单词对应的倒排列表在倒排文件的位置信息。...之所以会有冲突链表,是因为两个不同单词获得相同的哈希值,如果是这样,在哈希方法里被称做是一次冲突,可以将相同哈希值的单词存储在链表里,以供后续查找。   ...B树形成了层级查找结构,中间节点用于指出一定顺序范围的词典项目存储在哪个子树,起到根据词典项比较大小进行导航的作用,最底层的叶子节点存储单词的地址信息,根据这个地址就可以提取出单词字符串。                           ...图8 B树查找结构 总结 单词ID:记录每个单词单词编号; 单词:对应的单词; 文档频率:代表文档集合中有多少个文档包含某个单词 倒排列表:包含单词ID及其他必要信息 DocId:单词出现的文档

    1.4K20

    说实话,Intellij IDEA 自带的 Vim 插件真心不错。。。

    命令查找时,正则表达式默认大小写敏感,如果需要不敏感,可以在正则表达式开始处加上\c标志。 例如 /\cabc 可以匹配到 ABC。下面提到的:s命令同样适用。 6....退出插入模式 退出插入模式可以用 ESC 键,但键位太远。其实也可以用 Ctrl+[ 键退出插入模式 。...n行) L 跳转到屏幕底端(如果设置了set so=n,则跳转到倒数第n行) M 跳转到屏幕中间 f 或 F 跳转到本行某个字符,小写f向右查找,大写F向左查找。...用;或,在匹配间切换 t 或 T 跳转到本行某个字符之前,小写t向右查找,大写T向左查找。用;或,在匹配间切换 /正则表达式 跳转到下一个匹配。用n或N在匹配间切换。 ?...在Idea录制宏时,如果触发了代码自动完成,在自动完成列表启动的状态输入的字符不会被记录。

    13.1K42
    领券