一。 ElasticSerch的应用场景。
1. 简介
ElasticSerach是一个分布式,高性能,高可用,可伸缩,RESTful 风格的搜索和数据分析引擎。通常作为Elastic Stack的核心来使用。ES是一个近实时的搜索引擎。ElasticSerch在实际生产里通常和LogStash, Kibana, FileBeat 一起构成ElasticStack来使用,它是这些组件里面最核心的一个
2.ElasticSerch的优势(即为什么要使用es)
2.1横向可拓展性:只需要加一台服务器加一些配置,启动ES进程即可并入集群。
2.2分片机制提供更好的分布性: 同一个索引分成多个分片,分而治之的方式提升处理效率
2.3:高可用:提供复制机制,一个分片可设置多个复制,使得服务器宕机时集群可照常运行。
3.ElasticSerch的限制
3.1 无法连表查询
3.2 不支持事务
3.3 like查询的字符串会被分词,导致不完全匹配的结果掺杂其中。
3.4 各结点的一致问题:默认机制为通过多播机制,同步元数据信息,在繁忙的集群中可能会由于 网络阻塞导致各个节点元数据不一致。
3.5 没有细致的权限管理机制,无法像mysql那样分组用户及权限。
3.核心概念
1.索引(index)
在Elasticsearch中,索引时文档的集合,每个文档都属于一个特定的索引,并具有唯一的ID,索引是数据的逻辑容器,并具有唯一ID。索引是数据的逻辑容器,类似与传统数据库中的表。
2.文档(Document)
文档是ElasticSerch中的基本数据单元,通常用JSON表示,一个索引包含多个文档,每个文档都是一个唯一的ID和一段字段,字段可以包含文字,数字,日期等不同类型的数据。
3.映射(Mapping)
映射定义了索引中的文档字段及其属性,通过映射,你可以知道字段的数据类型,分词器等信息,以优化搜索和分析。
4.基本查询语法。
{
"query":{
"match":{
"field_name": "search_text"
}
}
}
其中:
match: 查询类型,表示进行匹配查询。
field_name: 要搜索的字段。
search_text: 要搜索的文本
"query":{
"multi_match":{
"query":"serch_text"
"fields": ["field1", "field2"]
}
}
其中:
multi_match: 多字段匹配查询。
query: 要搜索文本。
fields: 包含要搜索的字段的数组。
{
"query":{
"range":{
"field_name":{
"get": 10,
"lte": 100
}
}
}
}
其中:
range: 范围查询。
field_name: 要进行范围查询的字段
get 和 lte :大于等于和小于等于的范围条件。
3.聚合函数
"aggs":{
"agg_name":{
"agg_type": {
"field":"field_name"
}
}
}
其中:
aggs: 聚合查询
agg_name: 聚合的名称
agg_type: 聚合的类型(例如, ‘terms’,‘avg’ 等)。
field_name:用于聚合的字段
桶聚合
{
"aggs":{
"terms_agg":{
"terms":{
"field":"field_name",
"size":10
}
}
}
}
语法解释:
terms_agg: 桶聚合
terms:按字段值进行分组
field: 用于分组的字段
size:返回的桶的数量
聚合类型:
Terms Aggregation(词条聚合):按字段的唯一值进行分组
Range Aggregation(范围聚合):按字段的值划分为不同的范围
Date Histogram Aggregation: 按日期字段创建直方图。
Average Aggregation: 计算字段的平均值。
Sum Aggregation: 计算字段的总和。
Min and Max Aggregations(最小值和最大值聚合): 分别计算字段的最大值和最小值
Cardinality Aggregation: 计算字段的唯一值数量
4.排序
{
"sort":[
{ "field_name": { "order": "asc" } },
{ "another_field": { "order": "desc" } }
]
}
其中:
sort:排序查询。
field_name 和 another_field要排序的字段。
order:排序顺序,可以是‘asc’(升序)或“desc”(降序)。
5.分页
{
"from":0,
"size": 10,
"query":{
"math_all" : {}
}
}
其中:
from: 起始文档的索引
size:返回的文档数量
query:实际查询条件
{
"query":{
"match":{
"field_name": "search_text"
}
},
"highlight":{
"fields":{
"field_name":{}
}
}
}
其中:
highlight: 高亮显示查询结果
fields:要高亮显示的字段