CRUD
创建
PUT /test1/_doc/1
{
"name":"花开不识君123",
"age":23
}
定义类型
PUT /test2
{
"mappings": {
"properties": {
"name":{
"type": "text"
},
"age":{
"type": "integer"
},
"birthday":{
"type": "date"
}
}
}
}
查找
GET /test1 # 查找一个索引的信息
GET /_cat/indices # 查找所有索引的信息
更新
以前的方式 # 覆盖提交 ,如果修改的内容将会完全覆盖掉原来的内容,
PUT /test1/_doc/1
{
"name":"花开不识君123", # 缺少age,将会去除age字段
}
restful风格
POST /test1/_update/1
{
"doc":{
"name":"花开"
}
}
删除
DELETE /test1
复杂查询
返回值释义
{
"took" : 0,
"timed_out" : false,
"_shards" : {
"total" : 5,
"successful" : 5,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 37,
"relation" : "eq"
},
"max_score" : 5.006072,
"hits" : [
{
"_index" : "jd_goods",
"_type" : "_doc",
"_id" : "bbkgwXkBjG626xHb-Lcu",
"_score" : 5.006072,
"_source" : {
"image" : "//img10.360buyimg.com/n1/s200x200_jfs/t1/155845/22/16835/256780/6055644dE6e1a9178/ef5e0b1c514dd878.jpg",
"name" : "spring三剑客:微服务实战+Spring实战(第五版)第5版+Spring Boot实战",
"price" : "¥175.00"
}
}
]
}
}
- took 查询花费的时间 单位是毫秒
- timed_out是否超时 在请求超时之前,Elasticsearch 将会返回已经成功从每个分片获取的结果。
- _shards 分片信息 total 表示参与总分片数,successful 表示成功参与的分片数 ,skipped 跳过的分片数,failed 参与失败的分片数
- hits 命中信息 total 总的value 表示总命中数 relation表示查询使用的关系条件
- max_score 最符合条件结果的分数
- hits(具体的) 它的每个元素就是一个具体的数据信息
- _source 数据的源信息
多条件查询
must表示所有条件都要被满足
must-not 表示所有条件都不能满足
should表示可以只满足其中一个
GET /huakai_index/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"name": "花开"
}
},
{
"match": {
"age": "10"
}
}
]
}
}
精准匹配
term query会去倒排索引中寻找确切的term,花开 在倒排索引里会被切分成 “花”,“开”,正因为term不会被分词,使用"花开"去寻找时自然什么都找不到,此时使用keyword它在倒排索引作为一个整体,就可以被查到了
而英文如果中间不带空格,并不会被分成独立的单词,因此不需要添加keyword,而如果出现"aaa bbb" ,这样的形式,想要精准匹配aaa 同样需要添加keyword
GET /test1/_search
{
"query": {
"term": {
"name.keyword": { # 中文需要添加keyword 英文似乎不需要
"value": "花开"
}
}
}
}
范围查询
"range": {
"age": {
"gte": 10, # 大于等于
"lte": 30 # 小于
}
高亮
"highlight": {
"pre_tags": "<p style='color:red'>",
"post_tags": "</p>",
"fields": {
"name": {}
}
}
-
match是会进行分词,使用的是默认的分词器,只要包含其中的一个分词就能会被查询出来
-
must, 返回的文档必须满足must子句的条件,并且参与计算分值,filter, 返回的文档必须满足filter子句的条件。但是跟Must不一样的是,不会计算分值, 并且可以使用缓存
控制返回集
"_source":["name","desc","age"], # 控制返回字段
多字段查询
会在多个字段中进行匹配
GET /test1/_search
{
"query": {
"multi_match": {
"query": "夏辉",
"fields": ["name","desc"]
}
}
}