本篇会以小案例需求的方式带你学习Elasticsearch中基于RESTFulApi操做。手敲几遍,想不会也难。加油~mysql
对了,这里使用的是Kibana和head进行的管理,若是没有接触,推荐看下面的博客,写的挺清楚。sql
Elasticsearch也是基于Lucene的全文检索库,本质也是存储数据,不少概念与MySQL相似的。数据库
概念 | 说明 |
---|---|
索引(indices) | Databases数据库 |
类型(type) | Table数据库 |
文档(Document) | Row行 |
字段(Field) | Columns |
Elastic中索引至关于sql数据库中的数据库 实例: PUT 索引名 {}
GET 索引名
DELETE 索引名
删除完成后记得再建立回来,由于还要使用编程
类型至关于sql数据库中的表api
PUT 索引名/_mapping/类型 { "properties": { "字段":{ "参数名": "参数值" } } } 解释: 参数名: type,表示的是概参数的类型 参数值: 核心类型: 字符串: text(可分词)、keyword(不可分词) 整数:integer,long,short,byte 浮点:double,float,half_float,scaled_float 日期:date 逻辑:boolean 复合类型: 数组:array 对象:object 嵌套:nested 地理类型: 地理坐标:geo_point 地理地图:geo_shape 特殊类型: IP:ip 范围:completion 令牌计数:token_count 附件:attachment 抽取:percolator 关于参数类型的解释,这个博客感受写的不错,分享给大家:https://www.jianshu.com/p/01f489c46c38
#建立映射 PUT refapi/_mapping/book { "properties": { "title":{ "type": "text", "analyzer": "ik_max_word" }, "price":{ "type": "" }, "images":{ "type": "keyword", "index": true } } }
GET 索引号/_mapping
GET refapi/_mapping
POST 索引名/类型名 { "属性":"值", "属性2":"值2" }
#添加数据,无id POST refapi/book { "title":"女神养成计划II", "price":"128.5", "images":"1.png" } POST refapi/book { "title":"Java核心技术", "price":"128.5", "images":"1.png" } POST refapi/book { "title":"Java编程思想", "price":"128.5", "images":"1.png" } POST refapi/book { "title":"PHP编程思想", "price":"128.5", "images":"1.png" }
PUT 索引名/类型/id { "属性":"值", "属性2:"值2 }
#添加或更新数据:有id PUT refapi/book/b001 { "title":"女神养成计划III", "price":"138.5", "images":"3.png" } PUT refapi/book/b002 { "title":"坏蛋是怎么炼成的", "price":"66.66", "images":"4.png" }
DELETE 索引名/类型/id
DELETE refapi/book/b002
GET 索引/类型/id 相似于sql中的(select * from book where id = ?)
GET refapi/book/b001
GET 索引/类型/id?_source=字段,字段2 相似于sql中的(select title,price from book where id = ?)
GET refapi/book/b001?_source=title,price
#查询全部索引库 GET _search { "query": { "match_all": {} } }
#查询指定索引库 GET 索引库/_search { "query": { "match_all": {} } }
#查询指定索引库 GET refapi/_search { "query": { "match_all": {} } }
#查询指定索引库 中部分列数据 GET 索引库/_search { "query": { "match_all": {} }, "_source": ["字段1","字段2",....] }
#查询指定索引库 中部分列数据 GET refapi/_search { "query": { "match_all": {} }, "_source": ["title","price"] }
GET 索引库/_search { "query": { "match": { "字段": "值" } } }
GET refapi/_search { "query": { "match": { "title": "Java编程思想" } } }
至关因而and(交集)数组
#采用多条件进行查询,查询title为 “Java编程思想” GET 索引库/_search { "query": { "bool": { "must": [ { 关键字查询 } ] } } }
#采用多条件进行查询,查询title为 “Java编程思想” GET refapi/_search { "query": { "bool": { "must": [ { "match": { "title": "Java编程思想" } } ] } } }
#采用多条件进行查询,查询title为"Java编程思想"的,不含"PHP"的 GET refapi/_search { "query": { "bool": { "must": [ { "match": { "title": "Java编程思想" } } ], "must_not": [ { "match": { "title": "PHP" } } ] } } }
至关因而or(并集)app
#复合查询-should # 查询"PHP编程思想" ,以及"女神养成记"相关数据 GET 索引库/_search { "query": { "bool": { "should": [ { 关键字查询 }, { 关键字查询 }, ...... ] } } }
#复合查询-should # 查询"PHP编程思想" ,以及"女神养成记"相关数据 GET refapi/_search { "query": { "bool": { "should": [ { "match": { "title": "PHP编程思想" } }, { "match": { "title": "女神养成记" } } ] } } }
#查询价格为138.5 的信息 GET 索引库/_search { "query": { "term": { "字段": { "value": "值" } } } }
#查询价格为138.5 的信息 GET refapi/_search { "query": { "term": { "price": { "value": "138.5" } } } }
#范围查询-range GET 索引库/_search { "query": { "range": { "字段": { "gte": "大于等于", "lte": "小于等于", "gt": "大于", "lt": "小于" } } } }
#范围查询-range #查询价格在10 - 100 之间的数据 GET refapi/_search { "query": { "range": { "price": { "gte": 130, "lte": 140 } } } }
GET 索引库/_search { "query": { "match_all": {} }, "sort": [ { "字段": { "order": "排序方式(desc/asc)" } } ] }
#按照价格排序 GET refapi/_search { "query": { "match_all": {} }, "sort": [ { "price": { "order": "desc" } } ] }
GET 索引库/_search { "query": { "match_all": {} }, "from": 0, "size": 2 }
#分页-from+size GET refapi/_search { "query": { "match_all": {} }, "from": 0, "size": 2 }
建立:PUT 索引库 查询:GET 索引库 删除:DELETE 索引库
建立映射:PUT 索引库/_mapping/类型 查看映射:GET 索引库/类型
添加: 无id, 有id只须要在类型后面跟/id便可 POST 索引库/类型 { "属性":"值" } 删除: 无id, 有id只须要在类型后面跟/id便可 DELETE 索引库/类型
- 经过id查询: GET 索引库/类型/id GET 索引库/类型/id?_source=字段1,字段2
- 查询全部: GET 索引库/_search { "query":{ "match_all":{} } }
- 关键字查询: match GET 索引库/_search { "query":{ "match":{ "字段":"值" } } }
- 复合查询: must(交集and)、should(并集or) 使用bool进行多条件拼凑 采用 must、must_not进行数据过滤 must:须要留下来的数据 must_not:不须要留下的数据
- 精准查询: term GET czxy/_search { "query": { "term": { "字段": { "value": "值" } } } }
- 范围查询: range GET 索引库/_search { "query": { "range": { "字段": { gt : "大于", lt : "小于", gte : "大于或等于", lte : "小于或等于" } } } }
- 排序: sort GET 索引库/_search { "query": { "match_all": {} }, "sort": [ { "字段": { "order": "排序方式(desc:降序/asc:升序)" } } ] }
- 分页: from+size from: 从第几个索引开始(从0开始) size:从from索引向后数几(size)个进行查询 GET refapi/_search { "query": { "match_all": {} }, "from": 0, "size": 2 }