文档章节

ElasticSearch

JesseYan
 JesseYan
发布于 2015/03/14 19:59
字数 1323
阅读 19
收藏 0

#程序员薪资揭榜#你做程序员几年了?月薪多少?发量还在么?>>>

参考资料:http://blog.csdn.net/cnweike/article/details/33736429

官方文档:http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/

 

1.关键名词:

索引:拥有几分相似特征的文档的集合。如客户资料

类型:在一个索引中,你可以定义一种或多种类型。如博客数据类型、评论数据类型

文档:索引的基础单位。如一位客户的资料

 

2.常见命令:curl - ://
//检查集群健康状态
curl 'localhost:9200/_cat/health?v'

//检查集群中的节点列表
curl 'localhost:9200/_cat/nodes?v'

//查看所有索引
curl 'localhost:9200/_cat/indices?v'

//查看索引customer下、类型external下的文档号为1的文档内容

curl 'localhost:9200/customer/external/1?pretty' 或
curl -XGET 'localhost:9200/customer/external/1?pretty'



//创建索引customer
curl -XPUT 'localhost:9200/customer

                                
//创建索引customer下、类型external下的文档,制定文档id为1
curl -XPUT 'localhost:9200/customer/external/1' -d '               
{
    "name": "John Doe"
  }'

//说明:对其做第二遍,如果内容不同,john doe,则会覆盖

//创建未指定id的一个文档

curl -XPOST "localhost:9200/yjy_index/yjy_type" -d '{"name":"yjy"}'



//删除索引customer
curl -XDELETE 'localhost:9200/customer'

//删除符合条件的文档(删除所有名为yjy的文档)

curl -XDELETE 'localhost:9200/yjy_index/yjy_type/_query?pretty' -d '
        {
          "query": { "match": { "name": "yjy" } }
        }'

//修改文档,用文档id【多了doc关键字,和{}区分】,也多多了一个字段,year

curl -XPOST "localhost:9200/yjy_index/yjy_type/1/_update" -d '{"doc":{"name":"yjy","year":"2014"}}'

结果

{

  "_index" : "yjy_index",

  "_type" : "yjy_type",

  "_id" : "1",

  "_version" : 3,

  "found" : true,

  "_source":{"name":"yjy","year":"2014"}

}

 

//修改文档,用js脚本【自动按上面转为字符+】

curl -XPOST 'localhost:9200/yjy_index/yjy_type/1/_update' -d '{"script":"ctx._source.year += 5"}'

 

//批处理文档:_bulk API 【修改文档1,删除文档2】

curl -XPOST 'localhost:9200/customer/external/_bulk?pretty' -d '
        {"update":{"_id":"1"}}
        {"doc": { "name": "John" } }
        {"delete":{"_id":"2"}}

//说明: bulk API按顺序执行这些动作。如果其中一个动作因为某些原因失败了,将会继续处理它后面的动作。当bulk API返回时,它将提供每个动作的状态(按照同样的顺序)

//批量导入json文件【json文件accounts.json在当前目录下】

curl -XPOST 'localhost:9200/bank/account/_bulk?pretty' --data-binary @accounts.json


两种搜索运行方式:

1.在REST请求的URI中发送搜索参数

curl "localhost:9200/bank/account/_search?q=*&pretty"
参数说明:q=* 指匹配所有文档【?】

pretty:以json格式呈现;【&】

实例  Expand source

 

 

对响应的解释

- took —— Elasticsearch执行这个搜索的耗时,以毫秒为单位 - timed_out —— 指明这个搜索是否超时

- _shards —— 指出多少个分片被搜索了,同时也指出了成功/失败的被搜索的shards的数量

- hits —— 搜索结果

- hits.total —— 能够匹配我们查询标准的文档的总数目

- hits.hits —— 真正的搜索结果数据(默认只显示前10个文档)

- _score和max_score —— 文档相关度得分

 

 

2.将搜索参数发送到REST请求体中 【推荐】---耗时更短

等价于:【json格式请求体,关键字】

curl -XPOST 'localhost:9200/bank/account/_search?pretty' -d '
            {
              "query": { "match_all": {} }
            }'

实例  Expand source

 

搜索语句:【匹配所有,match_all,包含,不等于

查询前五个

curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
        {
          "query": { "match_all": {} },
          "size": 5
        }'

 

查询11-20

curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
        {
          "query": { "match_all": {} },
          "from": 11,
          "size": 10
        }'

 

以账户余额降序排序,最后返前十个文档

curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
        {
          "query": { "match_all": {} },
          "sort": { "balance": { "order": "desc" } }
        }'

 

设定筛选返回的字段:如下只要两个

curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
        {
          "query": { "match_all": {} },
          "_source": ["account_number", "balance"]
        }'

实例  Expand source

匹配符合条件的文档:XPOST  match

curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
        {
          "query": { "match": { "address": "mill" } }
        }'

匹配地址中有 Mill或Lane   {},大小写不区分

curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
        {
          "query": { "match": { "address": "mill lane" } }
        }'

 

匹配分隔的短语mill lane,用match变体【match_phrase】,包含,不限大小写

curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
        {
          "query": { "match_phrase": { "address": "mill lane" } }
        }'

实例  Expand source

返回“x和y”条件的----bool逻辑判断,返回地址为mill和lane

curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
        {
          "query": {
            "bool": {
              "must": [
                { "match": { "address": "mill" } },
                { "match": { "address": "lane" } }
              ]
            }
          }
        }'

 

返回“x或y”条件的----bool逻辑判断,返回地址为mill和lane

curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
        {
          "query": {
            "bool": {
              "should": [
                { "match": { "address": "mill" } },
                { "match": { "address": "lane" } }
              ]
            }
          }
        }'

 

既不包含“mill”,同时也不包含“lane”的

curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
        {
          "query": {
            "bool": {
              "must_not": [
                { "match": { "address": "mill" } },
                { "match": { "address": "lane" } }
              ]
            }
          }
        }'

 

被过滤 以及 过滤器 -----影响相关度越小越好,最小1

过滤器,它允许我们通过一个区间的值来过滤文档.相当于select where

curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
        {
          "query": {
            "filtered": {
              "query": { "match_all": {} },
              "filter": {
                "range": {
                  "balance": {
                    "gte": 20000,
                    "lte": 30000
                  }
                }
              }
            }
          }
        }'

 

 

聚合aggs—分组统计

按照state分组,按照州名的计数倒序排序

注意我们将size设置成0,这样我们就可以只看到聚合结果了,而不会显示命中的结果

curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
        {
          "size": 0,
          "aggs": {
            "group_by_state": {
              "terms": {
                "field": "state"
              }
            }
          }
        }'

实例  Expand source

每个州的账户的平均余额,只统计,不细分,十个

把average_balance聚合嵌套在了group_by_state聚合之中

curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
        {
          "size": 0,
          "aggs": {
            "group_by_state": {
              "terms": {
                "field": "state"
              },
              "aggs": {
                "average_balance": {
                  "avg": {
                    "field": "balance"
                  }
                }
              }
            }
          }
        }'

 

使用年龄段(20-29,30-39,40-49)分组,然后在用性别分组,然后为每一个年龄段的每一个性别计算平均账户余额

curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
        {
          "size": 0,
          "aggs": {
            "group_by_age": {
              "range": {
                "field": "age",
                "ranges": [
                  {
                    "from": 20,
                    "to": 30
                  },
                  {
                    "from": 30,
                    "to": 40
                  },
                  {
                    "from": 40,
                    "to": 50
                  }
                ]
              },
              "aggs": {
                "group_by_gender": {
                  "terms": {
                    "field": "gender"
                  },
                  "aggs": {
                    "average_balance": {
                      "avg": {
                        "field": "balance"
                      }
                    }
                  }
                }
              }
            }
          }
        }'


© 著作权归作者所有

上一篇: scala
下一篇: Git,GitHub使用
JesseYan
粉丝 3
博文 6
码字总数 3094
作品 0
朝阳
高级程序员
私信 提问
加载中

评论(0)

block.ClusterBlockException: blocked by: [SERVICE_UNAVAILABLE/1/state not recovered / initialized];

[2019-06-19T16:54:52,915][WARN ][r.suppressed ] [node-1] path: /_cat/indices, params: {v=} org.elasticsearch.cluster.block.ClusterBlockException: blocked by: [SERVICE_UNAVAILABL......

打杂uu
2019/06/19
3.6K
0
ELK6.6.0 X-PACK破解和密码设置

X-Pack简介 X-Pack是一个Elastic Stack的扩展,将安全,警报,监视,报告和图形功能包含在一个易于安装的软件包中。在Elasticsearch 5.0.0之前,您必须安装单独的Shield,Watcher和Marvel插件...

奋斗的寒霜
2019/06/18
0
0
ES(elasticsearch)搜索引擎

ES(elasticsearch)搜索引擎 0、授人以渔,少走半年弯路! 死磕 Elasticsearch 方法论:普通程序员高效精进的 10 大狠招! 一、Elasitcsearch基础篇 1.1 Elasitcsearch基础认知 1、Elasticse...

Ocean_K
2018/09/11
4.9K
6
Elasticsearch 使用集群

章节 Elasticsearch 基本概念 Elasticsearch 安装 Elasticsearch 使用集群 Elasticsearch 修改数据 Elasticsearch 搜索数据 REST API 现在,我们已经启动了节点(和集群),下一步是了解如何与...

海边长大
04/01
0
0
docker拉取特定版本的sebp/elk

例如:docker pull sebp/elk:5615 The following tags are available: , : ELK 7.2.0. (ELK version 7.1.1), (7.1.0), (7.0.1), (7.0.0). (ELK version 6.7.0), (6.6.2), (6.6.1), (6.6.0), ......

osc_arhujamz
2019/07/26
10
0

没有更多内容

加载失败,请刷新页面

加载更多

golangWeb框架---github.com/gin-gonic/gin学习四(模型绑定、自定义校验、ShouldBindXXX、BindXXX)

文章目录 模型绑定、校验 绑定json(ShouldBindJSON) 绑定xml(ShouldBindXML)、form(ShouldBind) 自定义校验器(demo有问题) BindQuery\ShouldBindQuery(只限查询参数) BindJson(json)、Bind(...

osc_sju4uxml
29分钟前
13
0
golangWeb框架---github.com/gin-gonic/gin学习八(监听多端口、多类型的struct模型绑定)

文章目录 监听多端口 自定义的struct绑定form-data 监听多端口 如何利用gin实现监听多端口 package main import ( "log" "net/http" "time" "github.com/gin-gonic/gin" "golang.org/x/sync/......

osc_04b0bwu2
31分钟前
8
0
golangWeb框架---github.com/gin-gonic/gin学习三(路由多视图函数、中间件、log日志)

文章目录 gin.New 路由包含多个HandlerFunc函数 使用中间件 如何写log日志 gin.New 我们之前的例子都是利用了gin.Default(),那么gin.New()跟它有什么区别?来简单看下源码 gin.Default()源码...

osc_3361hjxk
32分钟前
11
0
golangWeb框架---github.com/gin-gonic/gin学习一(路由、多级路由、参数传递几种形式)

文章目录 Gin介绍 安装 快速开始 路径参数 构造参数 post传参 get+post混合形式 构造Map格式 分组路由 Gin介绍 Gin是一个golang的微框架,封装比较优雅,API友好,源码注释比较明确,已经发布...

osc_0boqdoe2
33分钟前
23
0
golangWeb框架---github.com/gin-gonic/gin学习七(重定向、中间件Goroutines、http自定义配置)

文章目录 重定向 服务器内部重定向 中间件 中间件内部的Goroutines HTTP自定义配置 重定向 package main import ( "github.com/gin-gonic/gin" "net/http" ) func main() { router := gin.De......

osc_mgvk29y5
35分钟前
18
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部