Elasticsearch——(API//索引//查询//聚合)简介

1、访问Elasticsearch 的客户端主要有:

1>Elasticsearch为Java用户提供了两种内置客户端: 节点客户端(node client) 传输客户端(Transport client)
节点客户端(node client)
java程序中实例化该对象,之后对该对象发起查询。该对象将会以无数据节点的身份加入集群,即它将会成为集群的一个节点,用来转发请求到其他数据节点并接受返回数据
传输客户端(Transport client)
java客户端实例化该对象,之后对该对象发起查询。该对象不会作为节点加入集群,直接将请求传送给集群并等待查询结果返回。

上述两种客户端都工作在9300端口,注意java程序实例化的客户端必须与集群中其他节点版本一致,否则可能互相无法通讯。

java客户端使用方法及实例参看:https://www.elastic.co/guide/en/elasticsearch/client/index.html  ##自选版本,注意你的elasticsearch集群要与你的实例化的对象一致啊。



2>基于HTTP协议,以JSON为数据交互格式的RESTful API
其他所有程序语言都可以使用RESTful API,通过9200端口的与Elasticsearch进行通信,你可以使用你喜欢的WEB客户端,事实上,如你所见,你甚至可以通过curl命令与Elasticsearch通信。

NOTE:Elasticsearch官方提供了多种程序语言的客户端——Groovy,Javascript, .NET,PHP,Perl,Python,以及 Ruby——还有很多由社区提供的客户端和插件,所有这些可以在文档中找到。

其他语言参考客户端:https://www.elastic.co/guide/en/elasticsearch/client/index.html


2、下边对我们经常使用的curl命令进行简要介绍:
curl -X<VERB> '<PROTOCOL>://<HOST>:<PORT>/<PATH>?<QUERY_STRING>' -d '<BODY>'

  • VERB HTTP方法:GET, POST, PUT, HEAD, DELETE
  • PROTOCOL http或者https协议(只有在Elasticsearch前面有https代理的时候可用)
  • HOST Elasticsearch集群中的任何一个节点的主机名,如果是在本地的节点,那么就叫localhost
  • PORT Elasticsearch HTTP服务所在的端口,默认为9200
  • PATH API路径(例如_count将返回集群中文档的数量),PATH可以包含多个组件,例如_cluster/stats或者_nodes/stats/jvm
  • QUERY_STRING 一些可选的查询请求参数,例如?pretty参数将使请求返回更加美观易读的JSON数据
  • BODY 一个JSON格式的请求主体(如果请求需要的话)

举例说明,为了计算集群中的文档数量,我们可以这样做:


curl -XGET 'http://localhost:9200/_count?pretty' -d '
{
    "query": {
        "match_all": {}
    }
}
'






3、索引数据。将下边语句放入sense控制台

Elasticsearch中,文档归属于一种类型(type),而这些类型存在于索引(index)中,我们可以画一些简单的对比图来类比传统关系型数据库:
Relational DB -> Databases -> Tables -> Rows -> Columns
Elasticsearch -> Indices   -> Types  -> Documents -> Fields

//向索引megacorp和employee类型中添加3篇文档
PUT /megacorp/employee/1
{
    "first_name" : "John",
    "last_name" :  "Smith",
    "age" :        25,
    "about" :      "I love to go rock climbing",
    "interests": [ "sports", "music" ]
}
PUT /megacorp/employee/2
{
    "first_name" :  "Jane",
    "last_name" :   "Smith",
    "age" :         32,
    "about" :       "I like to collect rock albums",
    "interests":  [ "music" ]
}

PUT /megacorp/employee/3
{
    "first_name" :  "Douglas",
    "last_name" :   "Fir",
    "age" :         35,
    "about":        "I like to build cabinets",
    "interests":  [ "forestry" ]
}

4、搜索聚合查询
//搜索
GET /megacorp/employee/1
GET /megacorp/employee/_search  
GET /megacorp/employee/_search?q=last_name:Smith   ##字符串查询
GET /megacorp/employee/_search     ##DSL查询
{
    "query" : {
        "match" : {
            "last_name" : "Smith"
        }
    }
}


GET /megacorp/employee/_search   ###DSL查询之过滤查询
{
    "query" : {
        "filtered" : {
            "filter" : {
                "range" : {
                    "age" : { "gt" : 30 } 
                }
            },
            "query" : {
                "match" : {
                    "last_name" : "smith" 
                }
            }
        }
    }
}


GET /megacorp/employee/_search   ##DSL之全文查询
{
    "query" : {
        "match" : {
            "about" : "rock climbing"
        }
    }
}

GET /megacorp/employee/_search   ##DSL查询之全文查询(短语匹配)
{
    "query" : {
        "match_phrase" : {
            "about" : "rock climbing"
        }
    }
}

GET /megacorp/employee/_search  ###DSL查询之高亮查询结果。返回结果将会把about字段内容也复制一份到highlight中。
{
    "query" : {
        "match_phrase" : {
            "about" : "rock climbing"
        }
    },
    "highlight": {
        "fields" : {
            "about" : {}
        }
    }
}

//统计分析
GET /megacorp/employee/_search  ##对interests字段进行聚合统计
{
  "aggs": {
    "all_interests": {
      "terms": { "field": "interests" }
    }
  }
}

GET /megacorp/employee/_search  ##查询过滤后在进行统计
{
  "query": {
    "match": {
      "last_name": "smith"
    }
  },
  "aggs": {
    "all_interests": {
      "terms": {
        "field": "interests"
      }
    }
  }
}

GET /megacorp/employee/_search    ##聚合完后再次对每一组进行子聚合
{
    "aggs" : {
        "all_interests" : {
            "terms" : { "field" : "interests" },
            "aggs" : {
                "avg_age" : {
                    "avg" : { "field" : "age" }
                }
            }
        }
    }
}


5、总结:这里仅仅对elasticsearch 索引数据、查询数据、统计查询和API简要介绍。系统的进行学习相关查询统计语句才能更好的使用elasticsearch进行数据的存储和检索及统计。
后方将着重会对数据的检索和统计进行总结(查询和统计是各种客户端最常用的语句)。然后对数据的索引进行详细的总结。







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值