3.1 查看所有索引

到dev-tool执行ES的API
# 查看索引相关信息GET kibana_sample_data_ecommerce# 查看索引的文档总数GET kibana_sample_data_ecommerce/_count# 查看前10条文档POST kibana_sample_data_ecommerce/_search{}# _cat indices API 查看目录GET /_cat/indices/kibana*?v&s=index# 查看状态为绿的索引GET /_cat/indices?v&health=green# 按照文档的个数排序GET /_cat/indices?v&s=docs.count:desc# 查看具体字段GET /_cat/indices/kibana*?pri&v&h=health,index,pri,rep,docs,count,mt# 查看节点健康长度GET _cluster/health
3.2 文档的CRUD
| Index | PUT my_index/_doc/1
| {”user”:”mike”,”component”:”You konw, for searh”} |
|---|
| Create |
| POST my_index/_doc {不指定id,自动生成} |
| Read |
| Update |
| {”doc”:{}} |
| Delete |
- Type名 - 约定为_doc
- Create - 如果ID已存在,会失败
- Index - 如果ID不存在,则创建新的文档,如果已存在会覆盖原有文档,版本号会增加
- UPdate - 文档必须已经存在,更新只会对相应字段做增量修改
# create document 自动生成_idPOST users/_doc{"user":"Mike","component":"trying out kibana"}# create document 指定ID,如果ID已经存在则报错PUT users/_doc/1?op_type=create{"user":"Jack","component":"trying out kibana"}# create document 指定ID,如果ID已存在则会报错PUT users/_create/2{"user":"Tom","component":"trying out kibana"}# GET documentGET users/_doc/1# Index修改PUT users/_doc/1{"user":"Demo","component":"trying out kibana"}# UPDATE修改POST users/_update/1{"doc":{"component":"Hello, Elasticsearch","sign":"smallwolf"}}## Bulk API 在一次请求中,执行多次不同的操作POST _bulk{"index": {"_index":"test","_id":"1"}}{"field1":"value1"}{"delete":{"_index":"test","_id":"2"}}{"create":{"_index":"test2","_id":"3"}}{"field1":"value3"}{"update":{"_id":"1", "_index":"test"}}{"doc":{"field2":"value2"}}## 批量读取 mgetGET _mget{"docs": [{"_index":"test","_id":1},{"_index":"test","_id":"2"}]}## msearch操作GET users/_msearch{}{"query" : {"match_all" : {}}, "from" : 0, "size" : 10}{}{"query" : {"match_all" : {}}}{"index" : "users"}{"query" : {"match_all" : {}}}
3.3 Search API
3.2.1 URL Search 在URL中使用查询参数
URL查询
- 使用“q“,指定查询字符串
- ”query string syntax“ KV键值对
curl -XGET "http://elasticsearch:9200/bibana_sample_data_ecommerce/_search?q=customer_first_name:Eddie&sort=year:desc&from=0&size=10"{"profile":true}q:用来表示查询的内容Eddie:搜索叫做Eddie的客户sort排序/from和size用于分页Profile可以查看查询是如何被执行的
3.2.2 Query String Syntas
1. Term and Phrase
# 根据指定字段查询GET /movies/_search?q=2012&df=title{"profile":"true"}# 泛查询,正对_all,查询所有字段GET /movies/_search?q=2012{"profile":"true"}# Beautiful 或者 Mind 都可以查询出来GET /movies/_search?q=title:Beautiful Mind# 使用引号“Beautiful Mind”看作一个词语,Phrase查询GET /movies/_search?q=title:"Beautiful Mind"# 分组查询GET /movies/_search?q=title:(Beautiful Mind)
2. 布尔操作
AND / OR / NOT / && / || / !
+表示must-表示must_nottitle:(+matrix - reloaded )```bash使用引号“Beautiful Mind”看作一个词语,Phrase查询
GET /movies/_search?q=title:”Beautiful Mind”
必须包含Beautiful和Mind
GET /movies/_search?q=title:(Beautiful AND Mind)
必须包含Beautiful,但是不能包含Mind
GET /movies/_search?q=title:(Beautiful NOT Mind)
包含Beautiful,必须包含Mind %2B= ‘+’
GET /movies/_search?q=title:(Beautiful %2BMind)
<a name="T9h3d"></a>#### 4. 范围查询区间表示:[] 闭区间,{}开区间- year:{2019 TO 2018}- year:[* TO 2018]<a name="WtjE6"></a>#### 5. 算数符号- year:>2010- year:(>2010 && <=2018)- year:(+>2010 +<2018)```bash# 范围查询,区间写法 / 数学写法 查询大于1980GET /movies/_search?q=year:>1980
6. 通配符查询(效率低,占用内存大,不建议使用)
? 代表一个字符,*代表0或多个字符title:mi?dtitle:be*
7. 正则表达式
8 模糊匹配与近似匹配
title:befutifl~1title:"lord rings"~2加上2的意思是lord和rings之间可以有2个单词的间隔,如果不加2则必须lord和rings相连接
3.2.2 RequestBody Search
将查询语句放到Body中发送给ES进行查询
curl -XGET "http://elasticsearch:9200/kibana_sample_data_ecommerce/_search" -H'Content-Type:application/json' -d '{"query":{"match_all":{}}}'kibana_sample_data_ecommerce: 需要操作的索引名_search: 执行搜索的操作query: 查询match_all: 返回所有文档

1. _source filtering 只查询出来source指定的字段
如果_source没有存储,那就只返回匹配的文档的元数据,source支持通配符
# 只查询出来source指定的字段POST kibana_sample_data_ecommerce/_search{"_source":["order_date"],"query":{"match_all":{}}}
2. 脚本字段
GET kibana_sample_data_ecommerce/_search{"script_fields": {"new_field": {"script": {"lang" :"painless","source":"doc['order_date'].value + '_hello'"}}}, "query": {"match_all": {}}}
响应
"hits" : [{"_index" : "kibana_sample_data_ecommerce","_type" : "_doc","_id" : "havOdn8B5R0dBYvX0uZk","_score" : 1.0,"fields" : {"new_field" : ["2022-03-28T09:28:48.000Z_hello"]}}]
3. 短语搜索-Match Phrase
GET kibana_sample_data_ecommerce/_search{"query": {"match_phrase": {"comment": {"query":"Song Last Chrismas","slop": 1}}}}
# 包含"Last"或"Christmas"POST movies/_search{"query": {"match": {"title": "Last Christmas"}}}# 包含“Last Christmas”POST movies/_search{"query": {"match": {"title": {"query":"Last Christmas","operator": "and"}}}}# 查询one love 中间可以间隔一个单词POST movies/_search{"query": {"match_phrase": {"title": {"query": "one love","slop":1}}}}
4. Query String Query
# 设值PUT /users/_doc/1{"name":"Small Wolf","about":"java, golang, node, swift, elasticsearch"}# 查询Small并且Wolf同时存在POST users/_search{"query": {"query_string": {"default_field": "name","query": "Small AND Wolf"}}}POST /users/_search{"query": {"query_string": {"fields": ["anme", "about"],"query": "(Small AND Wolf) OR (Java AND Elasticsearch)"}}}
5. Simple Query String Query
- 类似Query String,但是会忽略错误的语法,同时只支持部分查询语法
- 不支持AND、OR、NOT,会当作字符串处理
- Term之间默认的关系是OR。可以指定Operator
- 支持部分逻辑
POST /users/_search { “query”: { “simple_query_string”: { “query”: “Small Wolf”, “fields”: [“name”], “default_operator”: “AND” } } } ```
