面试总结(五):搜索引擎

2023-11-15

问题导读:
1、搜索引擎有哪些特点(优势)?
2、搜索引擎使用到哪些场景中?
3、如何将原文档传给分次组件?
4、如何将得到的词(Term)传给索引组件(Indexer)?

 

搜索引擎

概述
全文搜索就是对文本数据的一种搜索方式,文本数据的都多,可以分为顺序搜索法和索引搜索法,,全文检索使用的是索引搜索法

特点(优势):

  • 做了相关度排序
  • 对文本中的关键字做了高亮显示
  • 摘要截取
  • 只关注文本,不考虑语义
  • 搜索效果更加精确——基于单词搜索,比如搜索Java的时候找不到JavaScript,因为它们是不同的两个单词



使用场景:

  • 替换数据库的模糊查询,提高查询速度,降低数据库压力,增强了查询效率
  • 数据库模糊查询缺点:查询速度慢,左模糊和全模糊会使索引失效,没有相关度排序,没有对文本中关键字
  • 做高亮显示,搜索效果不好
  • 全文检索是搜索引擎的基础
  • 只对“指定领域”的网站进行索引和搜索,即垂直搜索
  • 可以在word、pdf等各种各样的数据格式中检索内容
  • 其他场合,比如输入法等



倒排索引
正向索引的结构如下:
“文档1”的ID > 单词1:出现次数,出现位置列表;单词2:出现次数,出现位置列表;…………。
“文档2”的ID > 此文档出现的关键词列表。


当用户在主页上搜索关键词“华为手机”时,假设只存在正向索引(forward index),那么就需要扫描索引库中的所有文档,找出所有包含关键词“华为手机”的文档,再根据打分模型进行打分,排出名次后呈现给用户。因为互联网上收录在搜索引擎中的文档的数目是个天文数字,这样的索引结构根本无法满足实时返回排名结果的要求。
所以,搜索引擎会将正向索引重新构建为倒排索引,即把文件ID对应到关键词的映射转换为关键词到文件ID的映射,每个关键词都对应着一系列的文件,这些文件中都出现这个关键词。

得到倒排索引的结构如下:
“关键词1”:“文档1”的ID,“文档2”的ID,…………。
“关键词2”:带有此关键词的文档ID列表。



创建索引
全文检索的索引创建过程一般有以下几步:
一些要索引的原文档(Document)
为了方便说明索引创建过程,这里特意用两个文件为例:
文件一:Students should be allowed to Go out with their friends, but not allowed to drink beer.
文件二:My friend Jerry went to school to see his students but found them drunk which is not allowed.

将原文档传给分次组件(Tokenizer)
分词组件(Tokenizer)会做以下几件事情( 此过程称为Tokenize) :
1. 将文档分成一个一个单独的单词。
2. 去除标点符号。
3. 去除停词(Stop word) 。
所谓停词(Stop word)就是一种语言中最普通的一些单词,由于没有特别的意义,因而大多数情况下不能成为搜索的关键词,因而创建索引时,这种词会被去掉而减少索引的大小。
英语中挺词(Stop word)如:“the”,“a”,“this”等。
对于每一种语言的分词组件(Tokenizer),都有一个停词(stop word)集合。
经过分词(Tokenizer) 后得到的结果称为词元(Token) 。
在我们的例子中,便得到以下词元(Token):
“Students”,“allowed”,“go”,“their”,“friends”,“allowed”,“drink”,“beer”,“My”,“friend”,“Jerry”,“went
”,“school”,“see”,“his”,“students”,“found”,“them”,“drunk”,“allowed”。


将得到的词元(Token)传给语言处理组件(Linguistic Processor)
语言处理组件(linguistic processor)主要是对得到的词元(Token)做一些同语言相关的处理。
对于英语,语言处理组件(Linguistic Processor) 一般做以下几点:
1. 变为小写(Lowercase) 。
2. 将单词缩减为词根形式,如“cars ”到“car ”等。这种操作称为:stemming 。
3. 将单词转变为词根形式,如“drove ”到“drive ”等。这种操作称为:lemmatization 。

Stemming 和 lemmatization的异同:
相同之处:Stemming和lemmatization都要使词汇成为词根形式。

两者的方式不同:
Stemming采用的是“缩减”的方式:“cars”到“car”,“driving”到“drive”。
Lemmatization采用的是“转变”的方式:“drove”到“drove”,“driving”到“drive”。

两者的算法不同:
Stemming主要是采取某种固定的算法来做这种缩减,如去除“s”,去除“ing”加“e”,将“ational”变为“ate”,将“tional”变为“tion”。

Lemmatization主要是采用保存某种字典的方式做这种转变。比如字典中
有“driving”到“drive”,“drove”到“drive”,“am, is, are”到“be”的映射,做转变时,只要查字典就可以了。
Stemming和lemmatization不是互斥关系,是有交集的,有的词利用这两种方式都能达到相同的转换。
语言处理组件(linguistic processor)的结果称为词(Term) 。

在我们的例子中,经过语言处理,得到的词(Term)如下:
“student”,“allow”,“go”,“their”,“friend”,“allow”,“drink”,“beer”,“my”,“friend”,“jerry”,“go”,“schoo
l”,“see”,“his”,“student”,“find”,“them”,“drink”,“allow”。
也正是因为有语言处理的步骤,才能使搜索drove,而drive也能被搜索出来。


将得到的词(Term)传给索引组件(Indexer)
索引 组件(Indexer)主要做以下几件事情:
1. 利用得到的词(Term)创建一个字典。
在我们的例子中字典如下:



2. 对字典按字母顺序进行排序。



3. 合并相同的词(Term) 成为文档倒排(Posting List) 链表。

在此表中,有几个定义:

  • Document Frequency 即文档频次,表示总共有多少文件包含此词(Term)。
  • Frequency 即词频率,表示此文件中包含了几个此词(Term)。

所以对词(Term) “allow”来讲,总共有两篇文档包含此词(Term),从而词(Term)后面的文档链表总共有两项,第一项表示包含“allow”的第一篇文档,即1号文档,此文档中,“allow”出现了2次,第二项表示包含“allow”的第二个文档,是2号文档,此文档中,“allow”出现了1次。
到此为止,索引已经创建好了,我们可以通过它很快的找到我们想要的文档。

而且在此过程中,我们惊喜地发现,搜索“drive”,“driving”,“drove”,“driven”也能够被搜到。因为在我们的索引中,“driving”,“drove”,“driven”都会经过语言处理而变成“drive”,在搜索时,如果您输入“driving”,输入的查询语句同样经过我们这里的一到三步,从而变为查询“drive”,从而可以搜索到想要的文档。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

面试总结(五):搜索引擎 的相关文章

  • ES搜索引擎之ES介绍,安装以及辅助插件Kibana的安装

    文章目录 ES搜索引擎之ES介绍 安装以及辅助插件Kibana的安装 ElasticSearch介绍 1 1为什么会有ElasticSearch搜索引擎 1 2ES的介绍 1 3什么是倒排索引 ElasticSearch的安装 下载elas
  • es模糊查询

    Elasticsearch支持多种模糊查询 包括Wildcard查询 Fuzzy查询 Regexp查询和Match查询 这些查询可以用于执行模糊匹配 拼写纠错 范围查询等操作 下面是这些模糊查询的详细介绍 1 Wildcard 查询 Wil
  • Es中索引的删除操作

    package com atguigu es test import org apache http HttpHost import org elasticsearch action admin indices delete DeleteI
  • Elasticsearch 8.8.0 发布

    Elasticsearch 是一个基于 Lucene 库的搜索引擎 它提供了一个分布式 支持多租户的全文搜索引擎 具有 HTTP Web 接口和无模式 JSON 文档 Elasticsearch 基于 Java 开发 并在 SSPL Ela
  • elasticSearch 设置用户名密码 && 查询

    一 设置密码 1 需要在配置文件中开启x pack验证 修改config目录下面的elasticsearch yml文件 在里面添加如下内容 并重启 xpack security enabled true xpack license sel
  • WordPress网站的robots文件代码怎样写比较好

    本文记载和介绍的是wordpress的robots txt的在哪儿 以及如何修改robots文件来禁止搜索引擎爬取 ajax目录下的文章 以及如何优化WordPress网站的robots文件 wordpress设置robots文件的目录 w
  • 【ES小结】还在用ElasticSearch做查询?换条思路实现高效数据统计

    博客首页 派 大 星 欢迎关注 点赞 收藏 留言 本文由派大星原创编撰 系列专栏 ES小结 本系列记录ElasticSearch技术学习历程以及问题解决 ElasticSearch高效数据统计 聚合查询 什么是聚合查询 Kibana 命令测
  • 解决Elasticsearch查询默认最大值返回10000

    文章目录 1 问题描述 1 描述 2 分析 2 解决方案 1 更改当前索引最大查询条数 max result window 2 能查出数据 但是total依然还是1000 更改track total hits 3 当java使用时应该 4
  • 【实战】淘宝电商用户行为分析——SQL

    目录 一 项目背景 1 1分析目的 1 2分析思路 二 数据来源 清洗 2 1数据集介绍 2 2数据清洗 2 2 1 检查是否存在重复值 2 2 2 检查是否存在缺失值 2 2 3 一致化处理 对timestamp 2 2 4异常值处理 时
  • elasticSearch常见的面试题

    常见的面试问题 描述使用场景 es集群架构3个节点 根据不同的服务创建不同的索引 根据日期和环境 平均每天递增60 2 大约60Gb的数据 调优技巧 原文参考 干货 BAT等一线大厂 Elasticsearch面试题解读 掘金 设计阶段的调
  • SuperSocket实战手把手教程:一个完整的SocketServer项目

    SuperSocket系列教程 1 SuperSocket基础 一 基本概念 2 SuperSocket实战手把手教程 一个完整的SocketServer项目 目录 一 项目场景 1 Visual Studio新建项目 2 自定义自己服务器
  • 基于AJAX技术提高搜索引擎排名

    描述 嵌入在你的web页面中的导航元素能够降低你的搜索引擎评价排名并且降低你的网站的响应性能 本文作者想同你一起探讨如何使用AJAX技术来解决这两个问题 许多设计良好的web站点都包含大量的与实际内容相联系的可导航信息 用于导航的HTML标
  • 爬虫与反爬虫技术简介

    互联网的大数据时代的来临 网络爬虫也成了互联网中一个重要行业 它是一种自动获取网页数据信息的爬虫程序 是网站搜索引擎的重要组成部分 通过爬虫 可以获取自己想要的相关数据信息 让爬虫协助自己的工作 进而降低成本 提高业务成功率和提高业务效率
  • 公司实战 ElasticSearch+Kafka+Redis+MySQL

    一 需求 前一段时间公司要进行数据转移 将我们ES数据库中的数据转移到客户的服务器上 并且使用定时将新增的数据同步 在这过程中学到了很多 在此记录一下 二 技术栈 Mysql Redis ElasticSearch Kafka 三 方案 为
  • ElasticSearch-快速入门(一)

    ES简介 全文搜索属于最常见的需求 开源的Elasticsearch 是目前全文搜索引擎的首选 它可以快速地储存 搜索和分析海量数据 维基百科 Stack Overflow Github 都采用它 Elastic 的底层是开源库Lucene
  • ElasticSearch

    ElasticSearch 一 ES介绍 ES是一款基于倒排索引的NoSQL数据库 传统数据库对于模糊查询存在性能瓶颈 而ES更擅长与大数据量的模糊查询 ES在存储数据的时候会先将数据进行分词 将分词的结果作为索引存入数据库中 当进行查询时
  • Jina 2.0 快速入门指"北"

    What Why 选择Jina的4大理由 支持所有数据类型 大规模索引和查询任何类型的非结构化数据 视频 图像 长文本 语音 源代码 PDF等 速度极快 云原生 从第一天开始 Jina就是分布式架构 具有可扩展和云原生的设计 支持容器 并行
  • 系列教程

    PDF Search 系列教程来咯 在 Part 1 中 我们将演示如何从 PDF 中提取 处理并存储图像及文本 随着神经搜索 Neural Search 技术的普及 越来越多开发者 开始尝试用 Jina 解决非结构化数据的索引和搜索问题
  • 利用Apache Tika分页解析pdf文件内容

    Apache Tika 实现pdf文档分页提取内容 Apache Tika是一个多功能的文档内容提取工具 可以提取多种类型的文档内容 常用的如pdf office等格式 网上的例子基本上都是提取整篇文档内容 实际上用Tika提取pdf等文档
  • ChatGPT发布一年后,搜索引擎的日子还好吗?

    导读 生成式AI 搜索引擎的终结者还是进化加速器 ChatGPT发布刚刚一年 互联网世界已经换了人间 2023年 以ChatGPT和大模型为代表的生成式AI浪潮对全球互联网 云计算 人工智能领域都带来巨大冲击 而且生成式AI在各行各业的应用

随机推荐

  • steam登不上显示连接服务器错误,steam登陆网络连接错误代码的解决办法

    下面就是为您整理了的steam登陆网络连接错误代码的答案 steam登陆网络连接错误代码内容导航1 steam服务器连接失败 错误代码 118 steam服务器连接失败错误代码 118 解决方法 1 右键单击你电脑的网络连接符号 选择打开网
  • webpack output.library的16 种取值方法示例

    前置准备 在项目开发中使用 webpack 打包前端代码 对 output library 配置项总是不求甚解 只知道将代码打包成 npm 库的时候要配置它 这段时间又要开发组件库 借助这次机会对 output library 求甚解 配置
  • gimp中文版教程_GIMP中详细教程.pdf

    GIMP中详细教程 GIMP 实用系列教程 1文件的打开和存储 概述 打开GIMP软件其初始界面如下 左边是工具 工具箱中每选择一种工具后 通常在其下部会出 现一个与其相配的选项栏一起使用的 因此每选好一种工具 首先要 把选项栏中的有关选项
  • 蓝桥杯python青少年_让孩子参加蓝桥杯大赛好吗

    让孩子参加蓝桥杯大赛好吗 1 小学升初中备简历 该赛能帮孩子锦上添花 近年来 小学升初中的竞争越来越激烈 政策也年年在改变 许多地区的小学升初中甚至开始采取摇号和面试选拔学生 但不管政策怎么变 这其中的竞争力只会越来越大 优质生源决定学校核
  • 前端购物车,创建订单和支付流程

    前端购物车流程 用户在页面上将商品添加到购物车中 用户可以通过购物车页面查看添加的商品列表及其数量 并对其进行修改和删除 用户确认购物车中的商品无误后 点击 结算 按钮 用户填写收货地址 付款方式等相关信息 确认订单信息 系统生成订单并显示
  • flutter_blue + MethodChannel.invokeMethod + java.lang.NullPointerException

    友盟崩溃日志报了这样一个问题 说是扫描蓝牙设备回调时 MethodChannel 为空 java lang NullPointerException Attempt to invoke virtual method void io flut
  • Logrotate日志切分

    logrotate 程序是一个日志文件管理工具 用来把旧的日志文件更名或删除 并创建新的日志文件 我们把它叫做 转储 是个使日志轮替的程序 有了它就不用看着自己的日志体积一天天的变大 而可以根据你自己的需求来设定日志转储 这个工具对于像ng
  • discuz设置伪静态

    discuz设置伪静态 环境为 centos Apache mysql php 操作后台 点击提交 点击右上角的查看规则 复制一段到新建文件 htaccess中 注 WIN主机就另存为httpd ini Linux主机就另存为 htacce
  • python遍历文件夹下的所有子文件夹,并将指定的文件复制到指定目录

    python遍历文件夹下的所有子文件夹 并将指定的文件复制到指定目录 需求 复制单个文件夹 遍历所有子文件夹中的文件 并复制 代码封装 需求 在1文件夹中有1 2两个文件夹 将这两个文件夹中的文件复制到 after copy中 复制单个文件
  • Deathnote

    Deathnote 1 主机发现 arp scan l 2 扫描端口 nmap Pn sV P A 192 168 80 132 开放了80 22端口 3 访问80端口 修改host文件访问80端口时进行了跳转到deathnote vuln
  • Allegro 17.4设置中文界面

    一 Allegro 17 4 中文界面效果 二 Allegro 17 4 中文界面设置方法 2 1 需要打上此时 20210820 最新的S019的升级补丁 2 2 设置环境变量 变量名 intl enabled 变量值 1 要去除中文显示
  • LeetCode刷题-1

    数组 1 两数之和 题目描述 题目样例 Java方法 暴力枚举 思路及算法 代码 执行结果 复杂度 Java方法 哈希表 思路及算法 代码 执行结果 复杂度 题目描述 给定一个整数数组 nums 和一个整数目标值 target 请你在该数组
  • StarCraft开发:用肮脏的技巧解决难题

    http www csdn net article 2013 02 28 2814299 the starcraft path finding hack 摘要 在之前的文章中 Warcraft之父讲述了自己是如何以及为何重启StarCraf
  • Linux中的fork()函数

    Linux中的fork 函数 在Linux中 fork 函数是创建进程的基础 它是一个系统调用 用于创建一个新的进程作为当前进程的副本 新进程将拥有与原进程相同的代码 数据和堆栈 但是拥有不同的进程ID PID 并且它是原进程的子进程 函数
  • 【debug】(0, slice(None, None, None))‘ is an invalid key

    简单介绍 我获取了一个dataframe里的符合条件的多个index 想通过index对dataframe进行筛选 在筛选的时候反馈错误 原始代码为 input index df select df select item input in
  • 【word】如何设置交叉引用标注参考文献

    文章目录 1 定义参考文献编号格式 2 设置交叉引用 插入正文位置 3 修改连续多个参考文献的格式 4 更新正文标注 1 定义参考文献编号格式 开始 gt 编号 gt 定义新编号格式 2 设置交叉引用 插入正文位置 设置好固定的参考文献格式
  • 【vscode,python】pip成功的包却不能导入(import)问题

    第一次遇到这个问题 在网上找了些资料 网上的教程大致上都是需要去修改settings json这个文件 我问了我朋友 然后轻松地解决了这个问题 方法一 关掉编译软件重新打开即可解决问题 方法二 我认为造成这个问题的原因是在另一个新的路径上新
  • 真实GPS转腾讯/高德地图坐标系,百度地图与腾讯/高德地图坐标系转换

    1 获取真实坐标GPS wgs84转为gcj编码方式 positiontransform array manual 定义常量 var GPS PI 3 14159265358979324 x pi 3 14159265358979324 3
  • 对称矩阵的压缩存储、基于压缩矩阵的矩阵乘法

    def disp A 输出方阵A n len A for i in range n for j in range n print d A i j end print def compression A a 压缩矩阵A到a中 A是一个对称矩阵
  • 面试总结(五):搜索引擎

    问题导读 1 搜索引擎有哪些特点 优势 2 搜索引擎使用到哪些场景中 3 如何将原文档传给分次组件 4 如何将得到的词 Term 传给索引组件 Indexer 搜索引擎概述全文搜索就是对文本数据的一种搜索方式 文本数据的都多 可以分为顺序搜