ES

作者: 小王ovo | 来源:发表于2021-06-16 22:13 被阅读0次

过段时间需要写一点搜索的小业务,所以复习一下es。

什么是es?

我觉得是分布式强一致性+http+lucene.一开始以为es做了很多事,于是就去瞄了一眼lucene结果发现分词都是lucene做的,泪目了。

2021-06-16 15-07-10屏幕截图.png

简单的看一下英文的分词就是一个简单的词法器。kStemData1-8就是从a-z的词库,这样根据首字母就可以去不同的词库中去做匹配了,减小了匹配的范围,提高了匹配的速度。

索引结构和名词解释?

在没有es的时候我们怎么样做全文搜索?在mysql中我们使用like来达到相同的目的,坏处也是显而易见的
1.不走索引,全表扫描,mysql cpu拉满领导气得想打人。
2.只能首尾匹配,不能做复杂的搜索业务

正排索引:是以文档对象的唯一 ID 作为索引,以文档内容作为记录的结构。就像我们看书的时候先去看目录一样页码就是对应文章的唯一id.

倒排索引:就是以单词为索引,文章id为记录的索引结构。

倒排索引包含

1.文档id。
2.单词频率tf 记录的该单词在文档中出现的次数。
3.位置position,记录单词在文档中分词的位置,用于语句搜索phrase query。(分词之后是第几个单词)
4.偏移offset,记录单词在文档中开始和结束的位置,实现高亮。(这个应该会存多个,这样才能将出现多个的同一单词就能全部高亮了)

面临的问题

1.Dictionary(所有的单词)太大,因为一段文档可能分词出成千上万的单词。
2.Postings (即文档id等内容)太大,因为一个单词可能出现在任意一个文档中。

Postings中的数据没有依赖关系。所以es分为三个文件去存储

.doc

存储文档id和tf词频

.pay

记录payload信息和偏移量信息

.pos

记录位置信息

暂时就写到这里吧,太细致的东西现在写也不太适合,等过段时间有了新的感悟再说

相关文章

网友评论

      本文标题:ES

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