“ElasticSearch应用场景”的版本间的差异

来自姬鸿昌的知识库
跳到导航 跳到搜索
(建立内容为“假设我们要搜索一首诗句内容中带“前”字的古诗 {| class="wikitable" !name !content !author |- |静夜思 |床前明月光,疑是地上霜。…”的新页面)
 
 
(未显示同一用户的6个中间版本)
第1行: 第1行:
 +
https://www.bilibili.com/video/BV1nF411F75k/?p=2
 +
 
假设我们要搜索一首诗句内容中带“前”字的古诗
 
假设我们要搜索一首诗句内容中带“前”字的古诗
 
{| class="wikitable"
 
{| class="wikitable"
第17行: 第19行:
 
|……
 
|……
 
|}
 
|}
 +
思考:用传统关系型数据库和ES实现会有什么差别?
 +
 +
如果用像 MySQL 这样的 RDBMS 来存储古诗的话,我们应该会去使用这样的 SQL 去查询:<syntaxhighlight lang="sql">
 +
select name from poems where content like '%前%';
 +
</syntaxhighlight>
 +
 +
=== 顺序扫描 ===
 +
这种我们称为顺序扫描法,需要遍历所有的记录进行匹配。
 +
 +
不但效率低,而且还可能不符合我们搜索时的期望,比如我们在搜索“ABCD”这样的关键词时,可能还希望看到“A”、“AB”、“CD”、“ABC”的搜索结果。
 +
 +
 +
 +
https://www.bilibili.com/video/BV1nF411F75k/?p=3
 +
=== 全文检索 ===
 +
全文检索是指:
 +
 +
* 通过一个程序扫描文本中的每一个单词,针对单词建立索引,并保存该单词在文本中的位置、以及出现的次数
 +
* 用户查询时,通过之前建立好的索引来查询,将索引中单词对应的文本位置、出现的次数返回给用户,因为有了具体文本的位置,所以就可以将具体内容读取出来了
 +
 +
[[文件:ES应用场景1.png|无|缩略图|900x900像素]]搜索原理简单概括可以分为:
 +
 +
* 内容爬取,停顿词过滤,比如一些无用的像“的”、“了”之类的语气词/连接词
 +
* 内容分词,提取关键词
 +
* 根据关键词建立倒排索引
 +
* 用户输入关键词进行搜索

2022年11月30日 (三) 09:07的最新版本

https://www.bilibili.com/video/BV1nF411F75k/?p=2

假设我们要搜索一首诗句内容中带“前”字的古诗

name content author
静夜思 床前明月光,疑是地上霜。举头望明月,低头思故乡。 李白
望庐山瀑布 日照香炉生紫烟,遥看瀑布挂前川。飞流直下三千尺,疑是银河落九天。 李白
…… …… ……

思考:用传统关系型数据库和ES实现会有什么差别?

如果用像 MySQL 这样的 RDBMS 来存储古诗的话,我们应该会去使用这样的 SQL 去查询:

select name from poems where content like '%前%';

顺序扫描

这种我们称为顺序扫描法,需要遍历所有的记录进行匹配。

不但效率低,而且还可能不符合我们搜索时的期望,比如我们在搜索“ABCD”这样的关键词时,可能还希望看到“A”、“AB”、“CD”、“ABC”的搜索结果。


https://www.bilibili.com/video/BV1nF411F75k/?p=3

全文检索

全文检索是指:

  • 通过一个程序扫描文本中的每一个单词,针对单词建立索引,并保存该单词在文本中的位置、以及出现的次数
  • 用户查询时,通过之前建立好的索引来查询,将索引中单词对应的文本位置、出现的次数返回给用户,因为有了具体文本的位置,所以就可以将具体内容读取出来了
ES应用场景1.png

搜索原理简单概括可以分为:

  • 内容爬取,停顿词过滤,比如一些无用的像“的”、“了”之类的语气词/连接词
  • 内容分词,提取关键词
  • 根据关键词建立倒排索引
  • 用户输入关键词进行搜索