1、ElasticSearch
1.1.概念
1.2.ElasticSearch与MySQL的比较
- MySQL有事务性,而ElasticSearch没有事务性,所以你删了的数据是无法恢复的。
- ElasticSearch没有物理外键这个特性, ,如果你的数据强一致性要求比较高,还是建议慎用
- ElasticSearch和MySql分工不同, MySQL负责存储数据, ElasticSearch负责搜索数据
1.3.为什么要使用Elasticsearch?
因为在我们商城中的数据,将来会非常多,所以采用以往的模糊查询,模糊查询前置配置,会放弃索引,导致商品查询是全表扫面,在百万级别的数据库中,效率非常低下,而我们使用ES做一个全文索引,我们将经常查询的商品的某些字段,比如说商品名,描述、价格还有id这些字段我们放入我们索引库里,可以提高查询速度。
2.倒排索引
2.1.Elasticsearch中的倒排索引是什么?
倒排索引:将各个文档中的内容,进行分词,形成词条。然后记录词条和数据的唯一标识(id)的对应关系,形成的产物 。
倒排索引是搜索引擎的核心。搜索引擎的主要目标是在查找发生搜索条件的文档时提供快速搜索。倒排索引是一种像数据结构一样的散列图,可将用户从单词导向文档或网页。它是搜索引擎的核心。其主要目标是快速搜索从数百万文件中查找数据。
2.2.ElasticSearch数据的存储和搜索原理
2.3.数据库查询存在的问题
1. 性能低:使用模糊查询,左边有通配符,不会走索引,会全表扫描,性能低
2. 功能弱:如果以”华为手机“作为条件,查询不出来数据
2.4. ElasticSearch的相关内容
索引 (indices) -----> database
文档类型(type) ----> table ,(文档类型官方9版本以后会删除,7版本给了默认值 _doc)
文档(document) -----> 行数据
域(field) ------> column 列
映射(mapping) -----> 添加数据库表的列的时候指定的列的相关属性。
2.4.支持restful风格
Restful风格就是【同一个url】根据请求方式的不同,实现不同的功能。
GET----->查询
POST--->新增
PUT---->修改
2.5.相关API
(1)MatchAllQuery:查询所有
(2)TermQuery:根据用户输入的关键字,和词条进行完全等值匹配,如果有服务的词条则返回对应的数据。
(3)MatchQuery:先把keywords进行分词,然后拿着分词的结果再和索引中的词条进行匹配,匹配成功后,可以根据你指定的方式来取交集/并集,查询的是一个域中的词条
(4)RangeQuery:范围查询,有什么用, 价格查询 20000-30000
(6)boolQuery:对多个查询条件连接。连接方式:
• must(and):条件必须成立
• must_not(not):条件必须不成立
• should(or):条件可以成立
• filter:条件必须成立,性能比must高。不会计算得分
-------以上需要重点掌握
WildcardQuery
RegexpQuery
PrefixQuery
MatchQuery:
QueryString:
boolQuery: