ES相关概念对比MySQL
Elasticsearch(ES):用于数据存储、计算和搜索
安装ES:
ES是部署在Linux操作系统下的,可以通过Docker去部署:首先引入ES的镜像,可以官网下载或者用docker pull 拉取
镜像可以执行该命令,注意es版本
docker run -d \
--name es \
-e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \
-e "discovery.type=single-node" \
-v es-data:/usr/share/elasticsearch/data \
-v es-plugins:/usr/share/elasticsearch/plugins \
--privileged \
--network hm-net \
-p 9200:9200 \
-p 9300:9300 \
elasticsearch:7.12.1
安装完成可以通过ip+端口查看
同时需要部署Kibana,作为ES可视化界面,一样是部署在Linux操作系统中
docker run -d \
--name kibana \
-e ELASTICSEARCH_HOSTS=http://es:9200 \
--network=hm-net \
-p 5601:5601 \
kibana:7.12.1
同样安装完成可以通过ip+端口查看
ES与MYSQL区别:
首先是两种不同的数据库系统,MySQL是一种关系型数据库管理系统用于存储结构化数据,它适合于需要强一致性和事务支持的应用程序。Elasticsearch是一个基于Lucene的分布式搜索和分析引擎,适用于处理非常大的文本数据集。它专注于全文搜索、实时数据分析和日志搜索等用途,支持全文搜索和复杂的数据分析查询。对比如下:
倒序索引:
概念和应用场景
倒排索引的概念是基于Mysql这种正向索引而言的,通常的SQL的索引语句在正向索引时可以通过子节点来索引来判断是否符合条件例如:”select * from table where 索引字段 like ‘%索引条件%’ “
因为是遍历逐行索引,因此所造成的效率也就比较低,而且当模糊查询时需要精准的匹配条件,当条件较为模糊时可能就会匹配不到。举个例子:一个库存表索引,当我们模糊匹配某个精准的条件,如鱼竿,SQL语句可以快速搜索,匹配出满足条件的内容,如果此时的条件鱼竿,以空格衔接多个品牌,如化氏、天元、禧玛诺、达亿瓦...此时作为模糊查询条件,SQL语句也就无法满足我们的需求了,也就引出了倒序索引。
倒序索引的原理:
- 先生成词条库,将文档内容进行分词,文档的id与词条行程对应的关系,词条具有唯一性。
- 对需要搜所的内容进行分词,然后组成一个关键词列表,再用这个列表去词库匹配,找的对应的文档id列表
- 因为词条的唯一性再正向索引进行查找
打个比喻,四大发明活字印刷术,文档分出的词就和汉字一样,这些汉字是独立的,但是可以组词、组句(第一段的分词),当我们需要印刷一句话:“我爱中国”,要找“我”,“爱”,“中国”(此时也就是索引内容分词),然后去挑选模版库中选字印刷(也就对应了去词库中查找)可以看图理解一下