es

基础API使用

1. 启动状态

# 查看es是否正常启动
curl 'http://localhost:9200/?pretty'

2. 数据总量

使用_cout获取总数量 GET /_count

# 查看总数量
GET /_count?pretty
{
  "query": {
    "match_all": {}
  }
}

3. 根据ID查询

根据ID获取,以下方式都可以取得相同的值

GET /megacorp/employee/_search?q=_id:1
GET megacorp/employee/1

4. 查询所有的数据

GET megacorp/employee/_search
{
  "query": {
    "match_all": {}
  }
}
GET megacorp/employee/_search

5. 分词搜索及短语搜索

分将后面的条件进行分词,如果是"rock climbing" 有引号,就不会进行分词
如为match_phrase 即为短词搜索

GET /megacorp/employee/_search?q=about:rock climbing
GET megacorp/employee/_search
{
  "query": {
    "match": {
      "about": "rock climbing"
    }
  }
}

6. 搜索结果高亮显示

GET megacorp/employee/_search
{
  "query": {
    "match": {
      "about": "rock climbing"
    }
  },
  "highlight": {
    "fields": {
      "about": {}
    }
  }
}

7. 聚合-分组数量

按兴趣爱好的关键词进行聚合展示出其数量,类似于group by

GET /megacorp/employee/_search
{
  "aggs": {
    "test123": {
      "terms": {
        "field": "interests.keyword",
        "size": 10
      }
    }
  }
}

8. 聚合-平均值

GET /megacorp/employee/_search
{
  "aggs": {
    "age_avg": {
      "avg": {
        "field": "age"
      }
    }
  }
}

9. 聚合-多层分组并求组内平均

需要多层aggs进行聚合,下层在上层的基础上进行处理

GET /megacorp/employee/_search
{
  "aggs": {
    "inters": {
      "terms": {
        "field": "interests.keyword",
        "size": 10
      },
      "aggs": {
        "avg_age": {
          "avg": {
            "field": "age"
          }
        }
      }
    }
  }
}

ES中主副分片交互

1. 请求转发

任意节点都有能力处理任意请求,均知道集群中任意文档位置
为了负载均衡,最好轮询所有节点

2.新建删除单文档交互

请求发送到A -> A根据_ID找到主分片B -> B主分片执行 -> B成功后并行通知各副本分片C,D -> C,D副本执行成功后通知主分片B -> B主分片向调协节点A报告成功 -> A返回给客户端

即找主分片执行后,并行同步到副本,均执行成功后由入口节点返回

  • 一致性:一般要求大部分分版本可用,即大于总分片数量1/2 + 1, 如无足够的分片,默认等待1分钟,由参数timeout决定

ES系统配置基础

集群健康状态

使用GET /_cluster/health获取状态

索引

  • 每个索引包含多个物理分片
  • 每个分片包含索引的部分数据
  • 分片:
    • 主分片:主分片数量在索引建立时确定, 路由计算时须使用
    • 副本分片:可以随时修改,读服务+冗余备份功能

水平扩容

  • 直接增加节点,系统自动将分片平均分配
  • 也可增加副本数量
# 修改索引的副本数量
PUT /blogs/_settings
{
   "number_of_replicas" : 2
}

文档查询

  • 获取文档中的部分字段 GET /website/blog/123?_source=title,text
  • 检查文档是否存在 HEAD /website/blog/123

文档更新

  • 整体更新:同时更新version号PUT /website/blog/123
  • 部分更新:POST /website/blog/123/_update {"doc" : {"name" : "newName"}} 将name变成newName

文档创建

  • POST /website/blog/
  • PUT /website/blog/123?op_type=create 成功201,如已存在409冲突
  • PUT /website/blog/123/_create 成功201,如已存在409冲突

ES聚合操作

多个filter操作

GET /shirts/_search
{
  "query": {
    "bool": {
      "filter": [
        { "term": { "color": "red"   }},
        { "term": { "brand": "gucci" }}
      ]
    }
  },
  "aggs": {
    "models": {
      "terms": { "field": "model" }
    }
  }
}
posted @ 2018-08-24 13:28  mint_vip  阅读(235)  评论(0)    收藏  举报