ElasticSearch
博客专区 > JesseYan 的博客 > 博客详情
ElasticSearch
JesseYan 发表于3年前
ElasticSearch
  • 发表于 3年前
  • 阅读 19
  • 收藏 0
  • 点赞 0
  • 评论 0

华为云·免费上云实践>>>   

摘要: ElasticSearch

参考资料: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"
                      }
                    }
                  }
                }
              }
            }
          }
        }'


共有 人打赏支持
粉丝 4
博文 6
码字总数 3094
×
JesseYan
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: