初识ElasticSearch

2020-08-17  本文已影响0人  谭英智
ElasticSearch-elk
ElasticSearch-overview

ElasticSearch是一个分布式搜索引擎。支持索引自动分片,索引副本机制,restful接口,多数据源,自动搜索负载

Logstash是一个用于收集,分析和存储日志的工具

Kibana是一个为Logstash和ElasticSearch提供日志分析的web界面,可以汇总分析和搜索重要数据日志

Beats是一个采集系统监控数据的代理

elasticsearch-head

概念

restful api

非结构化索引

put /indexName
{
    "setting": {
        "index":{
            "number_of_shards": "2",
            "number_of_replicas": "0"
        }
    }
}
delete /indexName
{
    "acknowledged": true
}

文档

以JSON格式存储,包括index/type/id

插入
POST /indexName/typeName/id
jsonBody
#不指定id,会自动生成唯一id
更新
put /indexName/typeName/id
jsonBody
#es只支持覆盖,不支持更新
#增量更新:
post /indexName/typeName/id/_update
{
    "doc": {
        key: value
    }
}
#服务器会做全量覆盖
删除
#不存在会返回404
delete /indexName/typeName/id
#文档不会马上从磁盘删除,会先标志,后面进行批量删除
搜索
#搜索,不存在会返回404
get /indexName/typeName/id
get /indexName/typeName/_search #查10条
get /indexName/typeName/_search?q=age:20 #条件查询
DSL查询

为了支持更复杂和强大的查询

post /indexName/typeName/_search
{
    "query": {
        "match": {
            "age": 20
        }
    }
}
post /indexName/typeName/_search
{
    "query": {
        “range”: {
            ...
        },
        "exists": {#isNotNull
            "field": "card"
        },
        "term": {#精确匹配
            name: "marco"
        },
        “terms”: {
            id: ["id1", "id2"]
        },
        "match": {
            ...
        },
        "filter": {
            ...
        }
        "bool": {
            "must": {
                ...
            },
            "must_not": {
            
            },
            "should": {
            
            },
            "filter": {
                "range": {#范围匹配
                    "age": {
                        "gt": 30
                    }
                }
            },
            "must": {#必须满足
                "match": {#可以用于全文查询/精确查询
                    "sex": "男"
                }
            }
        }
    }
}
高亮显示
post /indexName/typeName/_search
{
    "query": {
        ...
    },
    "highlight": {
        "fields": {
            "name": {}
        }
    }
}
聚合
pretty

美化返回

get /indexName/typeName/id?pretty
指定返回字段
get /indexName/typeName/id?_source=id,name
仅返回数据,不返回元数据
get /indexName/typeName/id/_source
判断文档是否存在

只返回200/404

head /indexName/typeName/id
批量查询
post /indexName/typeName/_mget
{
    "ids": ["id1", "id2"]
}
_bulk

支持批量插入/修改/删除

{action: {metadata}}\n
{body}\n
{action: {metadata}}\n
{body}\n
例子:
{"create": {"_index": "indexName", "_type": "typeName", "_id": id}}
{key: value...}
分页

深度分页会出现问题,例如一个有5个分片的索引,如果查询10001到10010,每个分片会产生10010个结果,然后请求节点对这50050排序,并丢弃50040个结果,返回10

get /indexName/typeName/_search?size=5&from=10
映射

自动映射

json type -> es type
bool ->bool
number -> long
floating -> double
date string -> date
string -> keyword

对于string/keyword类型,es会精确搜索,对于text类型,es会进行分词并建立索引

创建类型确定索引
put /indexName
{
    "setting": {
        "index":{
            "number_of_shards": "2",
            "number_of_replicas": "0"
        }
    },
    "mapping": {
        "person": {
            "properties": {
                "name": {
                    "type": "text"
                }
                ...
            }
        }
    }
}
过滤查询

除了上述的结构化查询,es也支持过滤查询,如term/range/match

post /indexName/typeName/_search
{
    "query": {
        "bool": {
            "filter": {
                "term": {
                    "age": 20
                }
            }
        }
    }
}
上一篇下一篇

猜你喜欢

热点阅读