文档操作可在ES官方的DSL文档查看添加文档删除文档修改文档查询文档 添加文档
#创建索引
PUT person ##不添加映射时,在添加数据也就是添加文档时有隐式映射。
# 查询索引
GET person
# 添加文档,指定id
PUT person/_doc/1 ##如果此为此ID的文档已存在则修改文档
{
"name":"张三",
"age":20,
"address":"深圳宝安区"
}
# 添加文档,不指定id会报错。。POST不会报错。
PUT person/_doc/
{
"name":"李四",
"age":20,
"address":"深圳南山区"
}
添加文档还可以用POST请求(新增数据一般POST)
# 添加文档,指定id
POST person/_doc/1 //如果此为此ID的文档已存在则修改文档
{
"name":"张三",
"age":20,
"address":"深圳宝安区"
}
# 添加文档,不指定id
POST person/_doc/
{
"name":"李四",
"age":20,
"address":"深圳南山区"
}
删除文档
DELETe person/_doc/ID ##ID位置填文档的ID号,并且是逻辑删除,将状态改为了删除。并没有从磁盘中删除,会等整理ES时在删除。查询文档
# 查询所有文档 GET person/_search # 查询文档 GET person/_doc/ID ##ID处为文档的ID查询操作(常用查询) 全文查询-match查询
全文查询会分析查询条件,先将查询条件进行分词,然后获取文档,将文档按照定义时的分词器进行分词。然后和查询条件分词结果相匹配。
这是Person索引库中有的数据。
执行全文查询-match查询
GET person/_search
{
"query":{
"match":{
"address":{ //要查询的字段,address字段
"query": "南山区", //字段内容
"analyzer": "ik_max_word" //使用哪个分词器。
}
}
}
}
IK分词器会将查询条件内容分词,分成下面的内容
因为我们定义字段时使用的是默认的分词器,是standard,所以获取文档,对文档分词是一个个的
所以没有匹配到的内容。
如果将ik_max_word改为standard就能查询到结果。
词条查询-term查询词条查询不会将查询条件进行分词,避免对text类型的字段使用term查询,text字段会进行分词。
GET person/_search
{
"query": {
"term": { //使用词条查询
"addres": { //查询字段
"value": "山区", //查询的值
"boost": 1.0 //相关系数
}
}
}
}
命中数为0,因为文档内容进行分词时默认分词是一个字一个字的,没有和 ”山区“ 匹配的词。
因为文档内容默认分词是一个字一个字的,当查询条件的词条为一个字时,就能查询出结果。
GET person/_search
{
"query": {
"term": {
"address": {
"value": "山",
"boost": 1.0
}
}
}
}
范围查询
为了实现操作我们新建一个索引库。添加一些数据
PUT zwh/_doc/1001
{
"name":"zwh1",
"sex":"女",
"age":21
}
PUT zwh/_doc/1002
{
"name":"zwh2",
"sex":"男",
"age":22
}
PUT zwh/_doc/1003
{
"name":"zwh3",
"sex":"女",
"age":23
}
PUT zwh/_doc/1004
{
"name":"zwh4",
"sex":"男",
"age":24
}
进行范围查询
GET zwh/_search
{
"query":{
"range":{ //范围查询
"age":{ //age字段
"lt": 22, //小于22 可选参数有 gt大于 lt小于 gte大于等于 lte小于等于
"gt": 16 //大于16
}
}
}
}
复杂查询-------Boolean查询
它是使用一个或多个布尔子句构建的,每个子句都有一个类型化的实例。具体类型包括:
**_score:**查询出的内容的评分,根据评分大小排名。
GET zwh/_search
{
"query":{
"bool":{
"must": [ //所包括的条件必须匹配,会增加_score,must是一个数组,可以包括多个条件用逗号隔开
{
"match":{ //match查询
"name":"zwh1"
}
},
{
"range": {//范围查询
"age": {
"gt": 20
}
}
}
],
"filter":[ //所包括的条件必须匹配,但是不会增加_score,filter也是一个数组,可以包括多个条件用逗号隔开
{
"match":{
"sex":"女"
}
}
]
}
}
}
使用Filter之前
使用Filter之后
通过上面两张图可以发现,_score并没有增加
高亮查询什么是高亮查询?
就是我们搜索数据后,红色高亮的那一部分就是高亮搜索后的结果。
GET zwh/_search
{
"query":{
"bool":{
"must": [
{
"match":{
"name":"zwh1"
}
},
{
"range": {
"age": {
"gt": 20
}
}
}
],
"filter":[
{
"match":{
"sex":"男"
}
}
]
}
},
"highlight": {
"fields": {"name":{}
}
}
}
当执行该查询时,返回结果与之前一样,与此同时结果中还多了一个叫做 highlight 的部分。这个部分包含了 about 属性匹配的文本片段,并以 HTML 标签 封装:
Exists查询返回在提供的字段中包含 null 或 [] 以外的值的文档。
先添加一个name字段为空的文档
POST zwh/_doc/1009
{
"sex":"女",
"age":33
}
查询zwh索引库,发现总的数据为7条。
GET zwh/_search
使用Exists查询,查找zwh索引库name字段为非空的文档。发现总数只有6条了,显然刚才添加的那条name字段为空的数据并没有被查出来。
GET zwh/_search
{
"query":{
"exists":{
"field": "name"
}
}
}
Exists查询 查找空值
查找字段值为null或者【】的值 需要与 复杂查询中的 boolean查询配合使用
GET zwh/_search
{
"query": {
"bool": {
"must_not": [ //这个表示下方匹配到的内容不得出现在获得的文档对象中,上方复杂查询有讲过。
{
"exists": {
"field": "name"
}
}
]
}
}
}
执行查询,总数只有一条,name没有值的文档。
指定查询响应字段GET zwh/_search
{
"query":{
"range": {
"age":{
"lt":28,
"gt":23
}
}
}
, "_source": ["name","age"]
}
判断文档是否存在
存在返回200 ok
HEAD zwh/_doc/1001
不存在返回404 not found
HEAD zwh/_doc/1012分页查询
GET zwh/_search?from=0&size=1
from:代表越过这个文档,从这个文档的下一个文档开始。(可以理解为如果from=0,就从第一条开始显示,为2,就从第三条开始显示。默认from为0)
size:代表每次显示的条数。
执行查询,总文档有7条,只显示了一条。
Terms查询和上面的term相似,只不过可以有多个匹配条件。
GET zwh/_search
{
"query": {
"terms":{
"age":[23,21,36] //age字段的值满足其中之一就可以被查询出来
}
}
}
批量操作
通过批量 API,可以在单个 API 调用中执行许多索引/删除操作。这可以大大提高索引速度。
批量新增//{"要进行的操作":{"固定的值_index":"要对哪个索引库进行此操作",“固定值_id”:"添加文档内容的ID(若不指定会自动分配)"}}
//{“字段名”:"值" }(可以有多个,用逗号隔开)。
POST _bulk
{"create":{"_index":"zwh","_id":57}}
{"name":"拉布拉多1","sex":"dog","age":1}
{"create":{"_index":"zwh","_id":58}}
{"name":"拉布拉多2","sex":"dog","age":2}
{"create":{"_index":"zwh","_id":59}}
{"name":"拉布拉多3","sex":"dog","age":3}
执行操作
批量删除//{“要执行的操作名”:{“_index”:“要删除文档所属索引库的名字”,"_id":“文档的ID"}}
POST _bulk
{"delete":{"_index":"zwh","_id":57}}
{"delete":{"_index":"zwh","_id":58}}
{"delete":{"_index":"zwh","_id":59}}
执行删除
//{”操作名“:{”_index":"要修改文档所在的索引库","_id":"文档ID"}
//{"doc":{"字段":”值“}} (doc里面可以有多个字段和值,用逗号隔开)
POST _bulk
{"update":{"_index":"zwh","_id":58}}
{"doc":{"name":"123"}}
{"update":{"_index":"zwh","_id":59}}
{"doc":{"name":"1234"}}
{"update":{"_index":"zwh","_id":57}}
{"doc":{"name":"1235"}}
执行修改



