文档章节

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
朝阳
高级程序员
Centos6搭建elk系统,监控IIS日志

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

D杀手D
04/24
0
0
elasticsearch-head 安装介绍

elasticsearch-head 是用于监控 Elasticsearch 状态的客户端插件,包括数据可视化、执行增删改查操作等。elasticsearch-head 插件的安装在 Linux 和 Windows 没什么区别,安装之前确保当前系...

BeckJin
05/19
0
0
当ES赶超Redis,这份ES进修攻略不容错过!

从4月DB-Engines最新发布的全球数据库排名中,我们赫然发现ElasticSearch逆袭超越了Redis,从原先的第9名上升至第8名,而Redis则落后一名,排在了其后。 事实上,这场逆袭并不算太让人意外。...

DBAplus社群
04/15
0
0
分布式搜索elasticsearch 安装

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

空_明
2014/01/17
0
0
Elasticsearch中文分词研究

一、ES分析器简介 ES是一个实时搜索与数据分析引擎,为了完成搜索功能,必须对原始数据进行分析、拆解,以建立索引,从而实现搜索功能; ES对数据分析、拆解过程如下: 首先,将一块文本分成...

zhaipengfei1231
04/18
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Go语言_通神之路(2)

1、包 每个Go程序都是由包构成,从main包开始运行,就是我上一篇讲到的,都是从main函数开始执行,但是必须在main包下面! package mainimport ( "fmt" "math/rand")func ...

木九天
昨天
4
0
51.php-fpm的pool 慢日志 open_basedir 进程管理

12.21 php-fpm的pool 12.22 php-fpm慢执行日志(测试时报错) 12.23 open_basedir 12.24 php-fpm进程管理 12.21 php-fpm的pool: php-fpm里的pool也叫池子,咱们之前加入过www的配置,这个w...

王鑫linux
昨天
0
0
java内存模型概述

1、Java虚拟机运行时数据分区图 程序计数器:线程私有,是一块较小的内存空间,它是当前线程所执行的字节码文件的行号指示器 java虚拟机栈:线程私有,其生命周期与线程相同,这也就是我们平...

京一
昨天
1
0
shell学习之test语法

因为if-then语句不能测试退出状态码之外的条件,所以提供了test, 如果test命令中列出的条件成立,test命令就会退出并返回退出状态码0;如果条件不成立,test命令就会退出并返回非零的退出状态...

woshixin
昨天
0
0
openJDK之如何下载各个版本的openJDK源码

如果我们需要阅读openJDK的源码,那么需要下载,那么该去哪下载呢? 现在JDK已经发展到版本10了,11已经处于计划中,如果需要特定版本的openJDK,它们的下载链接在哪呢? 1.openJDK的项目 链接...

汉斯-冯-拉特
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部