以下操作在kibana中进行, 如果在linux的shell中, 请使用

curl -Xget 'http://node1:9200/index/type/id' -d '{ ... }' 的形式, 其中 -d 是传参

1, 获取集群状态

1), 查看健康状况:

GET /_cat/health?v

2), 查看节点:

GET /_cat/nodes?v

2, index操作(类似数据库databases)

1, index操作

1), 创建数据库

put lag
{
"settings": {
"index": {
"number_of_shards": 5,
"number_of_replicas": 1
}
}
}

2), 修改settings

分片不可以更改, 副本可以更改

put lag/_settings
{
"number_of_shards": 3
}

3), 获取所有的索引

    get _all

获取索引

get lag/_settings
get _all/settings
get .kibana,lagou/_settings
get _settings

4), 查看所有index

GET /_cat/indices?v

5), 创建数据

put customer/_doc/?pretty
{
"name": "vini"
}

4), 查询

get customer/_doc/?pretty

5), 删除index

delete customer?pretty
GET /_cat/indices?v

2, document操作(类似记录 record)

1), 保存文档

index/type/id 不指定id的话, 会自动生成uuid

put lag/job/
{
"title": 'python 爬虫“,
‘salary”: ,
’city‘: ’bj‘,
’company“: {
"name": "Baidu",
"company_addr": "bj"
},
"publish_date": ""
}

2), 获取文档

get lagou/job/

或者

看下面query

3), 修改数据

PUT /customer/_doc/1/_update?pretty
{
"name": "wenbronk"
}

就可以将原来的name进行更改

4), 使用post进行修改, 只修改某些字段

只能更新已经存在的id, 增量修改, 没有的字段会添加, 有的会覆盖

post lagou/doc//_update?pretty
{
"doc": {
"name": "vini",
"age":
}
}

5), 进行简单的脚本计算

post customer/_doc//_update?pretty
{
"script": "ctx._source.age += 5" }

6), 删除document

DELETE /customer/_doc/?pretty

3, batch处理

可以合并多个操作, 比如index, delete, update, 也可以从一个index导入另一个index

1), 批量插入数据

每条数据由2行构成, delete除外, 第一行为元数据行, 第二行为数据行, upsert比较特殊, 可能为upsert, doc, 或者script

元数据必须放在一行!!!!!

POST /customer/_doc/_bulk?pretty
{"index":{"_id":""}}    # 针对哪个索引完成的
{"name": "John Doe" }    # 数据行, 必须放在一行, 不能做美化
{"index":{"_id":""}}
{"name": "Jane Doe" }

如果不写index或者type, 需要在元数据中指定

2), 执行修改第一条, 删除第二条

delte操作, 只有一行,没有元数据行

POST /customer/_doc/_bulk?pretty
{"update":{"_id":""}}
{"doc": { "name": "John Doe becomes Jane Doe" } }
{"delete":{"_id":""}}

单条出错不影响, 会继续执行剩下的

3), 批量修改

post _bulk?pretty
{
"update": {"_index": "lag", "_type": "job", "_id": }
{"doc": {"fileds": "values"}
}

4), 批量获取

get _mget{
"docs": [
{"index": "tested",
"_type": "job",
"_id":
},
{"_index": "lag",
"_type": "job2",
"_id":
}
]
}

或者同一个index或者同一个 type

get lagou/job1
{
"docs": [
{"_id": },
{"_id": }
]
}

或者缩写

get lagou/job1
{
  "ids": [1, 2]
}

4, 查询

基本查询, 组合查询, 过滤查询

1), 导入基础数据

https://raw.githubusercontent.com/elastic/elasticsearch/master/docs/src/test/resources/accounts.json

curl -H "Content-Type: application/json" -XPOST "10.110.122.172:9200/bank/_doc/_bulk?pretty&refresh" --data-binary "@accounts.json"
GET /_cat/indices?v

2), 使用 q 进行查询

GET /bank/_search?q=*&sort=account_number:asc&pretty

只获取部分字段

get lag/job/1?_source

3)  使用body体进行查询

from 从哪开始, size: 取多少条, sort: 排序

使用 wildcard 进行 * 通配符查询

4), match 分词匹配, 部分匹配

a. match_all 查询所有

get /bank/_search
{
"query": {"match_all": {}},
"from": ,
"size": ,
"sort": [
{"account_number": "asc"}
]
}

_source: 显示取字段

get bank/_search
{
"query": {"match": {
"age":
}},
"_source": [
"account_number", "age", "address"
] }

5), macth_parse 短语匹配

会将 查询进行分词, 满足所有分词才会返回结果

term: 完全匹配, 不分词

get bank/_search
{
"query": {"match_phrase": {
"address": "mill lane",
“slop”: 6 # 必须大于设置的词距离才会被搜索到
}},
"_source": [
"account_number", "age", "address"
] }

6) term查询, 完全匹配

如果没有指定schema是什么类型的, 可能会查询失败

get /ban/_search
{
"query" : {
"term" : {
"abc": ""
}
}
}

terms 查询

可传入多个词, 只要有一个匹配, 就可以被查询到

get /ban/_search
{
"query" : {
"term" : {
"abc": ["", “568”, “23”]
}
}
}

7), 使用range查询, 范围查询

get /ban/_search
{
"query": {
"range": {
"price": {
"gte": ,
"lte":
}
}
}
}

8) multi_match: 多字段匹配

get /bank/_search 
{
  "query': {
    "bool": {
      "must": {
        "multi_match": {
          "operator": "and",
          "fileds": [ "name", "author^3"] # 把titil的权重提高, 分值较高的
          "query": "Guide"
        }
      },
      "filter": { 
        "terms": {
          "price": [ 35.99, 188.99]
        }
      }
    }
  }
}

5 bool匹配

1) must

get bank/_search
{
"query": {
"bool": {
"must": [
{"match": {"address": "mill"}},
{"match": {"address": "lane"}}
]
}
}
}
}

2) or 匹配, should

GET /bank/_search
{
"query": {
"bool": {
"should": [
{ "match": { "address": "mill" } },
{ "match": { "address": "lane" } }
]
}
}
}

3) must_not匹配

GET /bank/_search
{
"query": {
"bool": {
"must_not": [
{ "match": { "address": "mill" } },
{ "match": { "address": "lane" } }
]
}
}
}

4) 混搭

GET /bank/_search
{
"query": {
"bool": {
"must": [
{ "match": { "age": "" } }
],
"must_not": [
{ "match": { "state": "ID" } }
]
}
}
}
get lag/testjob/_search
{
"query":{
"bool": {
"should": [
{"term": {"title"; "python"}},
{"bool": {
"must": [
{"term": {"title": "es"}},
{"term": {"salary": }}
]
}
}
}
}
}
select * from test job where title = 'python' or
(title = 'es' and salary = )

5)  fliter查询, es5.x之后, 被 bool 替换, 包裹在bool查询内

1), 使用filtre实现 gte lte

GET /bank/_search
{
"query": {
"bool": {
"must": { "match_all": {} },
"filter": {
"range": {
"balance": {
"gte": ,
"lte": 30000,
"boost": 2.0
}
}
}
}
}
}
GET /bank/_search
{
"query": {
"bool": {
"filter": {
"term": {
"abc": ""
}
}
}
}
}

fitler查询多个值

GET /bank/_search
{
"query": {
"bool": {
"must": { "match_all": {} },
"filter": {
"term": [‘adb’, ‘']
}
}
}
}

判断字段是否存在

exists

7, 聚合查询

默认 limit 10

size : 0 为了不显示搜索结果

GET /bank/_search
{
"size": ,
"aggs": {
"group_by_state": {
"terms": {
"field": "state.keyword"
}
}
}
}

相当于

SELECT state, COUNT(*) FROM bank GROUP BY state ORDER BY COUNT(*) DESC LIMIT ;

2), 增加avg聚合

GET /bank/_search
{
"size": ,
"aggs": {
"group_by_state": {
"terms": {
"field": "state.keyword",
"order": {
"average_balance": "desc"
}
},
"aggs": {
"average_balance": {
"avg": {
"field": "balance"
}
}
}
}
}
}

3), from-to, 控制查询的返回数量, 其实就是分页

from: 从..开始

to: 到..结束

size: 10

GET /bank/_search
{
"size": ,
"aggs": {
"group_by_age": {
"range": {
"field": "age",
"ranges": [
{
"from": ,
"to":
},
{
"from": ,
"to":
},
{
"from": ,
"size":
}
]
},
"aggs": {
"group_by_gender": {
"terms": {
"field": "gender.keyword"
},
"aggs": {
"average_balance": {
"avg": {
"field": "balance"
}
}
}
}
}
}
}
}

4), sort

get lagou/_search
{
'query': {
'match_all': {}
}
"sort": [{
"comments": {
"order": "asa"
}
}]
}

注意, 被排序的字段, 必须被存储, 即  stored: true

es-03-DSL的简单使用的更多相关文章

  1. [OpenGL ES 03]3D变换:模型,视图,投影与Viewport

    [OpenGL ES 03]3D变换:模型,视图,投影与Viewport 罗朝辉 (http://blog.csdn.net/kesalin) 本文遵循“署名-非商业用途-保持一致”创作公用协议 系列 ...

  2. ES 03 - 初探Elasticsearch的主要配置文件(以6.6.0版本为例)

    目录 1 elasticsearch.yml(ES服务配置) 1.1 Cluster集群配置 1.2 Node节点配置 1.3 Paths路径配置 1.4 Memory内存配置 1.5 Network ...

  3. ES中DSL查询相关

    elasticsearch中的API:http://www.cnblogs.com/yjf512/p/4862992.html elasticsearch查询系列:http://blog.csdn.n ...

  4. ClickHouse与ES的优劣对比

    优点: ClickHouse写入吞吐量大,单服务器日志写入量在50MB到200MB/s,每秒写入超过60w记录数,是ES的5倍以上. 查询速度快,官方宣称数据在pagecache中,单服务器查询速率大 ...

  5. ES搜索引擎-简单入门

    基本概念: 索引Index es吧数据放到一个或者多个索引中,如果用关系型数据库模型对比,索引的地位与数据库实例(db)相当.索引存放和读取的基本单元是文档(document).es内部使用的是apa ...

  6. es简单打造站内搜索

    最近挺忙的,在外出差,又同时干两个项目.白天一个晚上一个,特别是白天做的项目,马上就要上线了,在客户这里 三天两头开会,问题很多真的很想好好静下来怼代码,半夜做梦都能fix bugs~ 和客户交流真的 ...

  7. ElasticSearch实战系列二: ElasticSearch的DSL语句使用教程---图文详解

    前言 在上一篇中介绍了ElasticSearch集群和kinaba的安装教程,本篇文章就来讲解下 ElasticSearch的DSL语句使用. ElasticSearch DSL 介绍 Elastic ...

  8. OpenGL ES教程系列(经典合集)

    为了搞透播放器的开发,花了些时间收集这些资料,虽然我已经搞定opengles渲染视频的内容,但是想玩玩opengles,往深里玩,图像处理这块是个好的方向,所以opengles是值得好好学的.   O ...

  9. 快速从SQL语法过度到Elasticsearch的DSL语法

    目录 前言 bool-相当于一个括号 should-相当于or must-相当于and must_not-相当于 ! and term-相当于= terms-相当于in between-相当于rang ...

  10. #研发解决方案介绍#基于ES的搜索+筛选+排序解决方案

    郑昀 基于胡耀华和王超的设计文档 最后更新于2014/12/3 关键词:ElasticSearch.Lucene.solr.搜索.facet.高可用.可伸缩.mongodb.SearchHub.商品中 ...

随机推荐

  1. RecyclerView怎么能没有ItemClickListener?加一个!

    RecyclerView可以用来代替ListView来展现大量的数据.Google在RecyclerView中提升了性能,和更多好用的API. 简单介绍RecyclerView 使用RecyclerV ...

  2. 网络编程socket、udp

    PS:主机字节顺序,个位在低字节上 计算机本身不能通讯,使通过在同一主机或者不同主机内的软件进行数据传输. 套接字socket:套接字socket可以参照文件指针来理解,文件指针是表示对文件打开进行某 ...

  3. linux初学terminal命令(1)ls、cd、su、man、pwd、useradd、passwd、cat、Ctrl+C、Ctrl+Z、Ctrl+L

    terminal命令(terminal终端对应windows 按下win(linux下叫Super键)+r,输入cmd(command,命令),召唤出来的Dos控制台) 1. ls(英文list):简 ...

  4. HDU 3078 LCA转RMQ

    题意: n个点 m个询问 下面n个数字表示点权值 n-1行给定一棵树 m个询问 k u v k为0时把u点权值改为v 或者问 u-v的路径上 第k大的数 思路: LCA转RMQ求出 LCA(u,v) ...

  5. 如何在js里引用php变量

    如何在js里面引用php的变量 php代码------------------------------------------- js代码------------------------------- ...

  6. acdream 20140730 D题

    今天见识到了“数学上来先打表”............ #include<iostream> using namespace std; #include<iomanip> #d ...

  7. 软件测试实践平台(Mooctest)FAQ

    0. 背景 我们在<软件测试技术>课程使用 MOOCTEST (mooctest.net) 作为课程的实践教学平台. 在教学过程中学生们遇到了一些问题,本文将一一总结. 注意:本文在解决问 ...

  8. 操作Checkbox标签

    在前端开发中,少不了对Checkbox的操作. 常用的的方法有2个:.is()和.prop()方法.前者是判断 checkbox的状态,选不是未选.而后者为checkbox设置一个值,可以设置chec ...

  9. css居中小结

    从css入门就开始接触,无所不在的,一直备受争议的居中问题. css居中分为水平居中和垂直居中,水平居中方式也较为常见和统一,垂直居中的方法就千奇百怪了. 博客原文地址:Claiyre的个人博客 ht ...

  10. C#6.0语言规范(十) 类

    类是可以包含数据成员(常量和字段),函数成员(方法,属性,事件,索引器,运算符,实例构造函数,析构函数和静态构造函数)和嵌套类型的数据结构.类类型支持继承,这是一种派生类可以扩展和专门化基类的机制. ...