美文网首页
搜索引擎核心理论思想

搜索引擎核心理论思想

作者: 右耳菌 | 来源:发表于2022-11-07 22:00 被阅读0次

1. 为什么需要搜索平引擎

首先先思考下面的几个问题:

  1. 我们的应用中一般用什么来存储数据?
    数据库如 MySQL

  2. 我们经常浏览新闻、博客、商品等,存储这些数据的表都应该有哪些字段?


  3. 在数据库中如何做下面的查询? 以上面的新闻表为例


  4. 当数据量变大时,上边3中的四个查询都变慢了,该如何优化?
    常用的数据库优化方法:
    建索引、分区表

  5. 建索引对“查询与钓鱼岛有关的新闻”有效率上边的提升吗?为什么?
    答案是没有的

  6. 索引的原理是怎样的?
    对列值创建排序存储,数据结构={列值、行地址}。在有序数据列表中就可以利用二分查找快速找到要查找的行的地址,再根据地址直接取行数据。

  7. 索引的排序,是怎么排的?
    数值列 : 数值大小
    时间列 : 转换成long之后按照数值大小
    文本列 : 按照字符集编码

  8. 在“新闻标题”列上建索引后,当我们查询 标题 = “钓鱼岛”,数据库会怎么去查?



    而当我们查询 标题 LIKE ‘%钓鱼岛%’,数据库此时无法使用索引进行查询,所以无法提升效率,此时会全表扫描。

由以上八个问题,我们可以得出以下的结论:

结论:
数据库适合结构化数据的精确查询,而不适合半结构化、非结构化数据的模糊查询及灵活搜索(特别是数据量大时),无法提供想要的实时性。

  • 结构化数据:用表、字段表示的数据
  • 半结构化数据:xml html
  • 非结构化数据:文本、文档、图片、音频、视频等

2. 搜索引擎是如何做到快速查询的

1思考:如何做才能快速查询到与“钓鱼岛是中国的”有关的新闻?
分析:我们查询时,输入的是“钓鱼岛是中国的”,想要得到标题或内容中包含“钓鱼岛是中国的”的新闻列表。
如何做,可以快速找到包含“钓鱼岛”的文章id,包含“中国”的文章id?

  • 倒排索引

2.为什么称为倒排索引?
英文原名Inverted index,失败地翻译成了倒排索引,正确翻译为:反向索引

  1. 下面这两个索引可以合并在一起吗?

正确的合并方式


上边的合并方式节约了存储空间,提升了检索效率。

  1. 反向索引的记录数会不会很大?
    正常来说是不会的,可以查看下面的图:



    所以一般来说最多也不会超过100W个

  2. 如何建立这样一个索引?


  3. 如果要开发一个中文分词器,你觉得该怎么实现对一句话进行分词?
    语句示例:张三说的却是在理:


  4. java开源的中文分词器有哪些?

  • 有很多,如何选择?
    1.准确率 2.分词效率 3.中英混合分词支持

  • 常用的中文分词器有:IKAnalyzer mmseg4j

  1. 分词器在分词时能不能统计出词的出现次数、位置?有什么作用?
    可以,这样可以方便进行一个短语查询和高亮等等。


  2. 你、我、他、的、地、了、标点符号…..这些需要为其创建索引吗?
    这种词一般称为停用词,不会被索引

  3. 当出现了新词了,该怎么办?
    撩妹老司机、软妹子、直男 遇到这种情况就需要允许自行添加内容到字典

所以由以上十个点,可以得出结论,如果要快速查询到指定的内容的新闻

结论:使用分词器对数据进行分词,建立反向索引。


3. 有了反向索引了,如何进行搜索?

  • 步骤1: 对搜索输入进行分词
    钓鱼岛、中国
  • 步骤2: 在反向索引中找出包含钓鱼岛、中国的文章列表


  • 步骤3: 合并两个列表,排序输出
    {1,12,8,5}

由上边的内容,引申出以下问题:

  • 问题1:合并后列表该如何排序?我们希望最相关的排在最前面
  • 问题2:相关性如何度量?
    人可以通过读内容判定相关性,机器不懂人话。
    得建立一套能评估相关性的模型。
  • 问题3:如何根据次数建立一个相关性评估模型?

  • 规则1:统计出现次数,根据次数从高到低排序


  • 规则2:加入权重,标题权重10,内容权重1,计算权重得分,按高-低排序



4. 其他的剩余议题

4.1 反向索引更新:数据更新时,索引是不是必须得更新?好更新吗?

正常来说是不存在更新这个操作的,实现更新操作的方式也很简单粗暴,就是先删除文章然后再重新索引该文章。

4.2 反向索引是存储在内存中,还是磁盘中合适?反向索引会有多大?

一般到都是写到磁盘上,然后用buff快速写入。

4.3 搜索引擎需要支持精确搜索吗?需要支持像数据库一样的多条件AND OR组合搜索吗?

必须要支持


5. Lucene

最受欢迎的java开源全文搜索引擎开发工具包。提供了完整的查询引擎和索引引擎,部分文本分词引擎。Lucene的目的是为软件开发人员提供一个简单易用的工具包,以方便在目标系统中实现全文检索功能,或者是以此为基础建立起完整的全文检索引擎。

是Apache的子项目,网址: http://lucene.apache.org/

  • Lucene在ES中的应用

ES将index的数据分为多份,每份叫一个shard,为了提高数据可用性,每个shard都会有冗余副本,每个副本实际上是一个Lucene index实例.


如果觉得有收获就点个赞吧,更多知识,请点击关注查看我的主页信息哦~

相关文章

  • 搜索引擎核心理论思想

    1. 为什么需要搜索平引擎 首先先思考下面的几个问题: 我们的应用中一般用什么来存储数据?数据库如 MySQL 我...

  • Base理论核心思想

    上一篇 <<

  • 分布式搜索es

    一、概念扫盲 elasticsearch设计的理念就是分布式搜索引擎,底层其实还是基于lucene的。 核心思想就...

  • es总结

    一、es基本组成 elasticsearch设计的理念就是分布式搜索引擎,底层其实还是基于lucene的,核心思想...

  • 道上闲言(四)

    儒家里面的心学一派,其理论思想有点儿近似于禅宗。而,禅宗的核心观点,又和儒家思想之中的:仁,很像。其中,仁的核心,...

  • 学习新时代中国特色社会主义思想心得体会

    伟大时代呼唤伟大理论,伟大时代孕育伟大理论。习近平新时代中国特色社会主义思想是党的十九大提出的核心思想,也是最重大...

  • ES 的分布式架构原理

    ElasticSearch 设计的理念是分布式搜索引擎,底层其实是基于 lucene 的。核心思想是在多台机器上启...

  • “铸师魂——好老师生命成长”主题学习活动心得体会

    儒家思想中,“仁”是思想根基、理论基础。而“孝” 则是核心。子孝弟悌则家庭和睦,家庭和睦则社会安定...

  • 物联网教程系列二:IOT理论基础

    2. IOT理论基础 学习IOT之前,首先我们学习下理论基础,IOT通讯之间是有协议的,我们的编程核心思想也是基于...

  • 公鸡歌

    思想思想, 朝思暮想。 理论理论, 有理无论。

网友评论

      本文标题:搜索引擎核心理论思想

      本文链接:https://www.haomeiwen.com/subject/bzaitdtx.html