在学习DSL搜索之前,我们需要做一些数据准备。
创建索引和mapping
POST http://10.0.0.220:9200/shop/_mapping
{
"properties":{
"id":{
"type":"long"
},
"age":{
"type":"integer"
},
"username":{
"type":"keyword"
},
"nickname":{
"type":"text",
"analyzer":"ik_max_word"
},
"money":{
"type":"float"
},
"desc":{
"type":"text",
"analyzer":"ik_max_word"
},
"sex":{
"type":"byte"
},
"birthday":{
"type":"date"
},
"face":{
"type":"text",
"index":false
}
}
}
创建数据(这里我创建了12条,给出相关的一条)
POST http://10.0.0.220:9200/shop/_doc/1012
{
"id":1012,
"age":41,
"username":"年事已高",
"nickname":"浪荡公子哥",
"money":4500,
"desc":"每天都想做个大宝剑",
"sex":1,
"birthday":"1973-03-17",
"face":"https://www.sudo.ren"
}
搜索
QueryString方式查询
GET http://10.0.0.220:9200/shop/_search?q=desc:我 ####单条件
GET http://10.0.0.220:9200/shop/_search?q=desc:我&q=age:38 ####多条件
采用DSL格式进行搜索(注意:重新开一个POSTMAN)
query -> match
POST http://10.0.0.220:9200/shop/_doc/_search
{
"query":{
"match":{
###根据字段匹配相应的值
"nickname":"不知道"
}
}
}
query -> exists
POST http://10.0.0.220:9200/shop/_doc/_search
{
"query":{
"exists":{
###判断字段是否存在
"field":"username"
}
}
}
搜索不合法问题定位
DSL查询的时候经常会出现一些错误查询,出现这样的问题大多都是json无法被es解析,他会像java那样报一个异常信息,根据异常信息去推断问题所在,比如json格式不对,关键词不存在未注册等等,甚至有时候不能定位问题直接复制错误信息到百度一搜就能定位问题了。