分布式搜索技术——Elasticsearch
Elasticsearch是一款非常强大的开源搜索引擎,可以帮助我们从海量数据中快速找到所需要的内容。
可以结合kibana(数据可视化)、Logstash(数据抓取)、Beats(数据抓取),广泛用于日志数据分析,实时监控等领域。
正向索引和倒排索引
数据库基于ID创建索引,如过搜索带有某一字段的“标题”,就要逐条数据扫描,判断是否包含该字段,包含就放到结果集,否则丢弃。所以正向索引在做局部字段索引的时候性能较差。
倒排索引创建的时候使用了“文档ID”和“词条”。
文档:每条数据就是一个文档
词条:文档按照语义分成词语(不可以重复)
elasticsearch是面向文档存储的,可以是数据库中的一条商品数据,一个订单信息。文档会被序列化为json格式后存储在elasticsearch中。
{
“id”:103,
“name”:“麻子”,
“price”:3499
}
索引(类似于表):相同类型的文档的集合
映射:索引中文档的字段约束信息,类似表的结构约束
⚠️ DSL是通过Http的请求发出去的,es里的接口与语言无关,任何语言之遥能发http请求就能把DSL发出去。
Mysql:擅长事物类型操作,
ES:擅长海量数据的搜索、分析、计算。
索引库操作
mapping属性
mapping是对索引库中文档的约束,常见的mapping属性包括:
- type:字段数据类型,常见的简单类型有:字符串:
text(可分词文本)、keyword(精确值,不可以再拆了,例如:品牌、国家、ip地址)
数值:long、integer、short。。。
布尔
期日:date
对象:可以嵌套
没有数组,但是允许有多个值 - index:是否创建索引,默认为true
要判断某一字段是否需要创建索引 - analyzer:使用哪种分词器
- properties:该字段的子字段