博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
es-03-DSL的简单使用
阅读量:5887 次
发布时间:2019-06-19

本文共 7487 字,大约阅读时间需要 24 分钟。

以下操作在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/_settingsget _all/settingsget .kibana,lagou/_settingsget _settings

 

4), 查看所有index

GET /_cat/indices?v

5), 创建数据

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

4), 查询

get customer/_doc/1?pretty

5), 删除index

delete customer?pretty
GET /_cat/indices?v

 

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

1), 保存文档

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

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

2), 获取文档

get lagou/job/1

或者

看下面query

 

3), 修改数据

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

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

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

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

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

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

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

6), 删除document

DELETE /customer/_doc/1?pretty

3, batch处理

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

1), 批量插入数据

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

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

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

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

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

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

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

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

3), 批量修改

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

 

4), 批量获取

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

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

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

或者缩写

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": 10, "size": 10, "sort": [ {
"account_number": "asc"} ]}

_source: 显示取字段

get bank/_search{  "query": {
"match": { "age": 37 }}, "_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": "1234"        }    }}

terms 查询

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

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

 

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

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

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": "40" } }      ],      "must_not": [        { "match": { "state": "ID" } }      ]    }  }}
get lag/testjob/_search{    "query":{        "bool": {            "should": [                {
"term": {
"title"; "python"}}, {
"bool": { "must": [ {
"term": {
"title": "es"}}, {
"term": {
"salary": 30}} ] } } } } }
select * from test job where title = 'python' or(title = 'es' and salary = 30)

 

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

1), 使用filtre实现 gte lte

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

 fitler查询多个值

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

判断字段是否存在

exists

7, 聚合查询

默认 limit 10

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

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

相当于

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

2), 增加avg聚合

GET /bank/_search{  "size": 0,  "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": 0,  "aggs": {    "group_by_age": {      "range": {        "field": "age",        "ranges": [          {            "from": 20,            "to": 30          },          {            "from": 30,            "to": 40          },          {            "from": 40,            "size": 10          }        ]      },      "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

转载地址:http://xcgix.baihongyu.com/

你可能感兴趣的文章
Annotation研究的一些学习资料
查看>>
webpack资料
查看>>
DotNet加密方式解析--散列加密
查看>>
OpenSSL使用2(SSL,X.509,PEM,DER,CRT,CER,KEY,CSR,P12概念说明)(转)
查看>>
【前端】:HTML
查看>>
SSM框架——使用MyBatis Generator自动创建代码
查看>>
java数据库操作:JDBC的操作
查看>>
基于OpenCV的形态学开源库 V0.2
查看>>
在ubuntu下安装和配置vsftpd
查看>>
c#中结构体和类的比较
查看>>
Linux磁盘配额
查看>>
JQuery UI的拖拽功能
查看>>
数据驱动销售——个性化推荐引擎
查看>>
C语言标准库函数qsort那点小事
查看>>
HL7 CDA高级培训
查看>>
Android 调用照相机拍照
查看>>
linux的C获取shell执行返回的结果
查看>>
关于spring mybateis 定义resultType="java.util.HashMap"
查看>>
程序员怎么留住健康?
查看>>
(转)C# 把我所积累的类库全部分享给博友(附件已经上传)
查看>>