文档章节

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"
                      }
                    }
                  }
                }
              }
            }
          }
        }'


© 著作权归作者所有

共有 人打赏支持
JesseYan
粉丝 3
博文 6
码字总数 3094
作品 0
朝阳
高级程序员
ES(elasticsearch)搜索引擎

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

Ocean_K
09/11
0
0
分布式搜索elasticsearch 安装

单机安装 安装我就以自己的项目为主我自己本身就是一下小项目从部署向下 安装步骤: 1. 安装jdk或者jre,然后设置好环境变更JAVA_HOME; 2. 下载elasticsearch,将之解压,到你项目文件下 我...

空_明
2014/01/17
0
0
Centos6搭建elk系统,监控IIS日志

**所需程序: 服务器端:java、elasticsearch、kikbana 客 户 端:IIS、logstash** 一、服务器端(192.168.10.46)操作: 先建立一个ELK专门的目录: [root@Cent65 ~]mkdir /elk/ 上传到elk...

D杀手D
04/24
0
0
初探 ELK - 每天5分钟玩转 Docker 容器技术(89)

在开源的日志管理方案中,最出名的莫过于 ELK 了。ELK 是三个软件的合称:Elasticsearch、Logstash、Kibana。 Elasticsearch 一个近乎实时查询的全文搜索引擎。Elasticsearch 的设计目标就是...

CloudMAN
2017/11/03
0
0
Elastic Search学习笔记2——安装head插件

下载head插件地址 http://mobz.github.io/elasticsearch-head/ 安装 在V2中,进入elasticsearch/bin目录 使用plugin可以直接安装插件 plugin install mobz/elasticsearch-head 在浏览器中输入...

晨猫
03/09
0
0

没有更多内容

加载失败,请刷新页面

加载更多

搬瓦工最新国内可访问镜像网址:bwh8.net

昨天搬瓦工之前的国内备用镜像网址bwh1.net被域名污染了,在国内打不开了。搬瓦工发布了最新的国内可访问的镜像地址:bwh8.net。 消息来源:搬瓦工优惠网->搬瓦工最新国内可访问镜像网址:b...

flyzy2005
39分钟前
0
0
大数据学习之-NN,SNN和DN的作用

NameNode(名称节点,简称NN)作用: 文件系统命名空间,维护文件系统目录树 存储文件名称, 文件目录结构, 文件属性(权限,大小,创建时间,副本数及大小....), 文件对应的数据块及这些块所...

hnairdb
43分钟前
1
0
TypeScript基础入门之声明合并(三)

转发 TypeScript基础入门之声明合并(三) 声明合并 将命名空间与类,函数和枚举合并 命名空间足够灵活,也可以与其他类型的声明合并。 为此,命名空间声明必须遵循它将与之合并的声明。 生成的...

durban
50分钟前
0
0
webSocket前台实现

webSocket前台实现 简单实现: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script type="application/javascript" src="js/base64.js"></script......

Airship
今天
1
0
从零到一,使用实时音视频 SDK 一起开发一款 Zoom 吧

zoom(zoom.us) 是一款受到广泛使用的在线会议软件。相信各位一定在办公、会议、聊天等各种场景下体验或者使用过,作为一款成熟的商业软件,zoom 提供了稳定的实时音视频通话质量,以及白板、...

七牛云
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部