关于Elasticsearch的认识和搭建以及原理基本的使用

认识:

Elasticsearch是基于MySQL,Sqlserver以及 MongoDB数据全文搜索优化的一种搜索引擎,在业务上对数据有进行全文搜索的需求时候,第一反应是用到全文索引,针对数据库的字段建立全文索引,在MySQL,Sqlserver关系型数据库中,针对某个字段建立索引,但是在业务复杂且要针对多个字段查询的时候,那么全文索引就会产生性能问题,对字段查询10次那么就要进行10OI,性能明显不足,那么为了解决这个问题MongoDB就出现了,他是存的BSON数据格式也可以理解为是Json,以文档的形式去储存,他有效的解决了性能问题,但他也有缺陷就是不支持中文以及大数据量的情况,这个时候Elasticsearch就出现了,他解决了前两者出现的所有问题,并且也是开源的。

搭建:

1.安装java运行环境银,因为Elasticsearch基于Java运行的

2.安装Elasticsearch 打开http://localhost:9200

3.安装可视化工具kibana,用于开发http://localhost:5601

注意:Elasticsearch所在磁盘必须超过10G空间,不然有可能出现运行失败。

原理:

Elasticsearch最关键的点就在于倒排索引和DocValues

ElasticSearch之所以搜索这么快速,归功于他的倒排索引的设计,然而它也不是万能的,倒排索引的检索性能是非常快的,但是在字段值排序时却不是理想的结构。下面是一个简单的倒排索引的结构

倒排索引的结构

如上表便可以看出,他只有词对应的doc,但是并不知道每一个doc中的内容,那么如果想要排序的话每一个doc都去获取一次文档内容岂不非常耗时?Doc Values的出现使得这个问题迎刃而解。

Doc Values 是什么

其实大部分NoSQL在创建多个索引的时候也采用这种方式,就是再使用另一种方式存储一份文本,使得可以增强搜索。Doc values 通过转置两者间的关系来解决这个问题。倒排索引将词项映射到包含它们的文档,Doc values将文档映射到它们包含的词项:

将文档映射到它们包含的词项

当数据被转置之后,想要收集到每个文档行,获取所有的词项就非常简单了。所以搜索使用倒排索引查找文档,聚合操作收集和聚合 Doc Values 里的数据,这就是 ElasticSearch。

那么在什么时候建立好这个Doc Values的呢,流程是这样的NEST客户端,客户端处理数据成json格式的文档形式,然后发送到Elasticsearch接收到数据创建Index,然后把json数据放到Docment中,然后生成倒排索引,然后把Docment存到Index中,Index放到磁盘持久化。

那么查询的时候怎么查呢,先去查倒排索引

在生成Doc Values之前最关键的一步就是映射和分词,

映射Mapping,就是知道哪些字段是Text类型的才可以去分词,可以在类中有特性去指定哪些字段可以被分词,然后才能进行分词。

当json转换到Docment的时候,elasticsearch会对数据的Text字段值进行分词,分词总共有三步。

第一是文本过滤,为了避免类似的xss攻击,比如用户在某个字段填入了<script>while (true) {alert('你关不掉我');}</script>我是帅哥,那么进行文本过滤的时候自动会把前面的js脚本过滤掉。

第二步是分词,把我是帅哥分成四个字符,类似于一个数组

第三步是分词过滤,简单来说就是自定义,就是把已经分好的词进行自定义,比如把分好的英文自定义大小写,简体字自定义成繁体字

分词并不是针对所有字段都可以进行分词,只有是文本的在C#中是string,对应的Elasticsearch的数据类型是text才可以进行分词,使用Mapping来分词,如果不想某个字段类型为text的字段不想进行分词的时候,重新映射把text改为keyword就不会进行分词。

基本使用:

在 .NET 中使用 Elasticsearch:从安装到实现搜索功能的完整指南-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值