全文检索-ElasticSearch 初步检索
1._cat
1.1 /_cat/nodes:查看所有节点
1.2 /_cat/health:查看 es 健康状况
GET http://192.168.190.135:9200/_cat/health
1.3 /_cat/master:查看主节点
GET http://192.168.190.135:9200/_cat/master
1.4 /_cat/indices:查看所有索引
类似于show databases; GET http://192.168.190.135:9200/_cat/indices
索引一个文档(保存一条记录)
PUT 请求带Id保存(一般用于修改)
PUT customer/external/1;在 customer 索引下的 external 类型下保存 1 号数据为:{"name":"John Doe"}
发送多次是一个更新操作。
PUT 可以新增可以修改。PUT 必须指定 id;由于 PUT 需要指定 id,我们一般都用来做修改操作,不指定 id 会报错。
2.2 POST保存
PUT 和 POST 都可以新增和修改。POST 新增。如果不指定 id,会自动生成 id。指定 id,该id如果没有对应数据为新建操作,如果有对应数据则为update操作,并更新版本号。
3 查询文档(查询记录)
get查询数据&乐观锁字段
get查询方式: index/type/id
http://192.168.56.10:9200/customer/external/1
返回的数据:
{
"_index": "customer", # 在哪个索引(库)
"_type": "external", # 在哪个类型(表)
"_id": "1", # 文档id(记录)
"_version": 2, # 版本号 更新一次就变化一次
"_seq_no": 1, # 并发控制字段,每次更新都会+1,用来做乐观锁
"_primary_term": 1, # 同上,主分片重新分配,如重启,就会变化
"found": true,
"_source": { # 数据
"name": "John Doe"
}
}
# 乐观锁更新时携带 ?if_seq_no=1&if_primary_term=1
携带数据要求_seq_no为1且_primary_term为1的时候才进行更改,如果不是则不更改
更新文档——POST /_update
更新文档有很多种方式,前面说了两种PUT /index/type/id 和 POST /index/type/id
POST customer/external/1/_update 注意该方式下的请求体格式
{
"doc":{ "name": "John Doew"}
}
post /_update更新会对比原来的数据,与原来一样就什么都不做,version、seq_no均不改变。
PUT customer/external/1
和 POST customer/external/1
则不会进行比较,对原数据进行覆盖。
那么什么时候用什么呢?
- 对于大并发更新,不带 update;
- 对于大并发查询偶尔更新,带 update;对比更新,重新计算分配规则。
删除文档&索引
删除文档
直接发送delete请求
删除索引
也是直接发送delete请求
bulk——批量操作api
指定索引和类型的bulk批量操作
POST http://192.168.190.135/customer/external/_bulk
语法格式:
{action:{metadata}}\n // 例如index保存记录,update更新
{request body }\n
{action:{metadata}}\n
{request body }\n
保存两条文档的格式:
{"index":{"_id":"1"}} // 这里index表示保存操作
{"name":"John Doe"}
{"index":{"_id":"2"}}
{"name":"John Doe"}
这里无法使用postman进行测试,用kibana额Dev_tools中执行
对所有索引执行批量操作
POST /_bulk
{"delete":{"_index":"website","_type":"blog","_id":"123"}}
{"create":{"_index":"website","_type":"blog","_id":"123"}}
{"title":"my first blog post"}
{"index":{"_index":"website","_type":"blog"}}
{"title":"my second blog post"}
{"update":{"_index":"website","_type":"blog","_id":"123","retry_on_conflict":3}}
{"doc":{"title":"my updated blog post"}}
bulk的批量操作,当发生某一条执行发生失败时,其他的数据仍然能够接着执行,也就是说彼此之间是独立的。
bulk api以此按顺序执行所有的action(动作)。如果一个单个的动作因任何原因失败,它将继续处理它后面剩余的动作。当bulk api返回时,它将提供每个动作的状态(与发送的顺序相同),所以可以检查某一个指定的动作是否失败了。