文章目录

为什么需要搜索引擎

议题1:为什么需要搜索引擎?

问题1:我们的应用中一般用什么来存储数据?

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

搜索引擎核心思想原理(1)_数据库

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

搜索引擎核心思想原理(1)_数据_02

问题4:当数据量变大时,这四个查询都变慢了,该如何优化?

常用的数据库优化方法:
建索引、分区表

问题5:索引的原理是怎样的?

搜索引擎核心思想原理(1)_搜索引擎_03

问题6:索引的排序,是怎么排的?

搜索引擎核心思想原理(1)_搜索_04

问题7:在“新闻标题”列上建索引后,当我们查询 标题 = ‘钓鱼岛’

,数据库会怎么去查?

而当我们查询 标题 LIKE ‘%钓鱼岛%’

,数据库该如何去查?

搜索引擎核心思想原理(1)_搜索_05

结论:

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

搜索引擎核心思想原理(1)_数据库_06

议题2:如何做才能快速查询到与“钓鱼岛是中国的”有关的新闻?

搜索引擎核心思想原理(1)_搜索_07

问题2:为什么称为倒排索引?

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

搜索引擎核心思想原理(1)_搜索引擎_08

问题3:下面这两个索引可以合并在一起吗?

搜索引擎核心思想原理(1)_搜索_09

问题4:反向索引的记录数会不会很大?

搜索引擎核心思想原理(1)_数据库_10

问题5:如何建立这样一个索引

搜索引擎核心思想原理(1)_数据_11

问题6:如果要开发一个中文分词器,你觉得该怎么实现对一句话进行分词?

搜索引擎核心思想原理(1)_数据_12

问题7: java开源中文分词器有哪些?

搜索引擎核心思想原理(1)_搜索_13

问题8: 分词器在分词时能不能统计出词的出现次数、位置?有什么作用?

搜索引擎核心思想原理(1)_搜索引擎_14

你、我、他、的、地、了、标点符号……这些需要为其创建索引吗?

这种词一般称为停用词,不会被索引

问题10: 当出现了新词了,该怎么办?

撩妹 老司机、软妹子、直男

议题3:如何做才能快速查询到与“钓鱼岛是中国的”有关的新闻?

搜索引擎核心思想原理(1)_搜索引擎_15

议题3:有了反向索引了,如何进行搜索?

如想搜索与 “钓鱼岛是中国的” 相关的新闻

步骤是怎样的?

搜索引擎核心思想原理(1)_搜索引擎_16

问题1:合并后列表该如何排序?

我们希望最相关的排在最前面

问题2: 相关性如何度量?

人可以通过读内容判定相关性,机器不懂人话。
得建立一套能评估相关性的模型

问题3:如何根据次数建立一个相关性评估模型?

搜索引擎核心思想原理(1)_搜索引擎_17

复杂的相关性计算模型有

搜索引擎核心思想原理(1)_搜索_18

思考

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

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

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

lucene简介

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

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

shard

一个index可能存储大量的数据,以至于一台机器存放不下,即使能承载,由单台机器查询全量数据,也相当耗时。为了解决这个问题,ES将index中数据分为多份,每份叫一个shard。

replica

replica即为shard的备份,每个shard可以有多个replica,其中一个位
primary shard,剩余的为replica shard。Replica除可以起到容错的作用外,还可以提高查询并发度。

Lucene在ES中的应用

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

搜索引擎核心思想原理(1)_搜索_19

ES架构

搜索引擎核心思想原理(1)_搜索_20

模拟es运行小demo

​https://github.com/hufanglei/daily-code/tree/es-demo1​


收工!!