先来了解什么是ElasticSearch中的文档??
ES是面向文档(document oriented)的,这意味着它可以存储整个对象或文档(document)。然而它不仅仅是存储,还会索引(index)每个文档的内容使之可以被搜索。在ES中,你可以对文档(而非成行成列的数据)进行索引、搜索、排序、过滤。
ES使用Javascript对象符号(JavaScript Object Notation),也就是JSON,作为文档序列化格式。JSON现在已经被大多语言所支持,而且已经成为NoSQL领域的标准格式。
ES存储的一个用户文档的格式示例:
{ "id":1, "name":"zq", "birthday":"1997-01-01", "hobby":["音乐","运动"], "info":[ { "id":1, "name":"z" }, { "id":2, "name":"q" } ] }
在ES中将对象转化为JSON并做索引要比在表结构中做相同的事情简单的多~
CRUD:
温馨小提示:全部命令集合放在文章最后了哦~ 下面是演示效果
1.添加 - ①指定文档id
PUT test/user/1
{
"id":1,
"name":"郑清",
"age":18
}
②不指定id会默认生成一个【ES内置ID创建】AWgdjWwHtBOnz6xlJ0ha
POST test/user
{
"id":2,
"name":"郑清2",
"age":20
}
2.获取 - ①指定ID的文档
GET test/user/1
②获取指定ID文档的部分字段
GET test/user/1?_source=name
③只返回文档内容,不要元数据
GET test/user/1/_source
3.删除
DELETE test/user/1
4.修改 - ①更新整个文档(即先删除后再添加)
PUT test/user/1
{
"id":1,
"name":"郑清"
}
注意:在响应中,我们可以看到Elasticsearch把 _version 增加了...
②局部更新 - 覆盖
POST test/user/1/_update
{
"doc":
{
"id":1,
"name":"名字被修改了..."
}
}
5.查询 - ①查询1个
GET test/user/1
②查询所有
GET test/user/_search
GET _search --> 没有指定任何的查询条件,只返回集群索引中的所有文档
③批量查询
GET test/user/_mget
{
"ids":["1","3"]
}
④高级查询 - 查询age为10~18的文档
GET test/user/_search?q=age:[10 TO 18]
⑤高级查询+排序【asc:升序 desc:降序】
GET test/user/_search?q=age:[10 TO 20]&sort=age:asc
⑥高级查询+排序+分页 【from:从第几页开始 size:每页数据条数】
GET test/user/_search?q=age:[10 TO 20]&sort=age:asc&from=0&size=1
⑦高级查询+排序+分页+截取字段 【_source:截取name和age字段】
GET test/user/_search?q=age:[10 TO 20]&sort=age:asc&from=0&size=2&_source=name,age
相当于sql: select name,age from t_user where name like %zq% orderby id desc limit 0,10
最后附上全部命令:
# 添加 - ①指定文档id
PUT test/user/1
{
"id":1,
"name":"郑清",
"age":18
}
# 添加 - ②不指定id会默认生成一个【ES内置ID创建】AWgdjWwHtBOnz6xlJ0ha
POST test/user
{
"id":2,
"name":"郑清2",
"age":20
}
# 获取 - ①指定ID的文档
GET test/user/1
# 获取 - ②指定ID文档的部分字段
GET test/user/1?_source=name
# 获取 - ③只返回文档内容,不要元数据
GET test/user/1/_source
# 删除 - 指定文档【ID 或 ES内置创建的ID->AWgdjWwHtBOnz6xlJ0ha】
DELETE test/user/1
# 修改 - ①更新整个文档(即先删除再添加)
PUT test/user/1
{
"id":1,
"name":"郑清"
}
# 修改 - ②局部更新->覆盖
POST test/user/1/_update
{
"doc":
{
"id":1,
"name":"名字被修改了..."
}
}
查询字符串:
# ①查询1个
GET test/user/1
# ②查询所有
GET test/user/_search
# 没有指定任何的查询条件,只返回集群索引中的所有文档
GET _search
# ③批量查询
GET test/user/_mget
{
"ids":["1","3"]
}
# ④高级查询 - 查询age为10~18的文档
GET test/user/_search?q=age:[10 TO 18]
# ⑤高级查询+排序【asc:升序 desc:降序】
GET test/user/_search?q=age:[10 TO 20]&sort=age:asc
# ⑥高级查询+排序+分页 【from:从第几页开始 size:每页数据条数】
GET test/user/_search?q=age:[10 TO 20]&sort=age:asc&from=0&size=1
# ⑦高级查询+排序+分页+截取字段 【_source:截取name和age字段】
GET test/user/_search?q=age:[10 TO 20]&sort=age:asc&from=0&size=2&_source=name,age
【相当于sql: select name,age from t_user where name like %zq% orderby id desc limit 0,10 】