美文网首页
初识ElasticSearch

初识ElasticSearch

作者: 谭英智 | 来源:发表于2020-08-17 09:02 被阅读0次
ElasticSearch-elk
ElasticSearch-overview

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

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

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

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

  • packetbeat用于网络数据的采集,支持ICMP/DNS/HTTP/Mysql/PostgreSQL/MongoDB/Memcache
  • Filebeat用于监控和收集服务器日志文件
  • Metricbeat可以定期收集外部系统的监控指标,例如Apache/HAProxy/MongoDB/Mysql/Nginx/PostgreSQL/Redis/System/Zookeeper

elasticsearch-head

  • 通过docker安装
  • 通过chrome插件安装

概念

  • 索引:可以看做数据库的库,一个索引可以包含多个分片,分片可以包含多个副本,可以存储在多台服务器
  • 类型:可以看作数据库的表
  • 文档:可以看作表的一行记录,同一索引的不同文档可以有不同的结构,但是同一字段需要有相同的类型;文档由多个字段组成,每个字段可以多次出现在一个文档中;同一索引下的所有文档内如果有同名的字段,类型必须相同
  • 映射:所有文档写入索引之前会先进行分析,如何将如数文本分割成词条/哪些词条被过滤,这种行为叫映射。一般由用户自定义规则

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
                }
            }
        }
    }
}
  • 过滤语句会精确匹配特定值,高效
  • 查询语句会计算匹配程度,并排序输出,比较耗时

相关文章

  • Mac 安装ElasticSearch

    本系列只是学习ElasticSearch,初识ElasticSearch,大家一起学习 安装java Mac上我个...

  • 初识elasticsearch

    概念 全文检索 从文本或数据库中、不限定数据字段、自由的萃取出信息的技术运行全文检索任务的程序,一般称作搜索引...

  • ElasticSearch初识

    数据结构 结构化:指具有固定格式或有限长度的数据,如数据库,元数据等。 非结构化:指不定长或无固定格式的数据,如邮...

  • elasticsearch初识

    简单介绍 ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎...

  • Elasticsearch初识

    问题一 描述Elasticsearch中讲到的以下基本概念,并说明它们之间的区别和联系:Cluster, Node...

  • 初识ElasticSearch

    第一部分主要介绍了ElasicSearch发展历程、基本概念、一些常用接口使用指南。总体而言跟官方文档差不多,未有...

  • 初识Elasticsearch

    Elasticsearch docker 安装Elasticsearch: docker pull Elastic...

  • 初识ElasticSearch

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

  • Elasticsearch初识

    开源分布式搜索分析引擎, 基于Java语言开发, 采用Lucene内库构建 近实时 分布式存储, 搜索, 分析引擎...

  • Elasticsearch初识

    一、安装和配置 1.安装 elasticsearch默认不允许以root账号运行,所以创建一个用户创建用户:use...

网友评论

      本文标题:初识ElasticSearch

      本文链接:https://www.haomeiwen.com/subject/wngwcktx.html