文章目录
ElasticSearch的基本使用
ElasticSearch和关系型数据库的区别
ElasticSearch | MySQL |
---|---|
Index(索引) | Database(数据库) |
Type(类型) | Table(表) |
Document(文档) | Row(行) |
Fields(字段) | Column(列) |
- ES里面的index可以看做一个库,而Type相当于表,Document就是每一行数据,Fields就是每一列的字段了。
- Type的概念已经逐渐弱化,ElasticSearch 6.X中,一个index下已经只能包含一个type了。
索引操作
创建索引
向ES服务器发送put
请求:http://localhost:9200/索引名
响应:
{
"acknowledged": true,
"shards_acknowledged": true,
"index": "索引名"
}
- 多次创建同一个index会报错
- 发送
post
请求是不允许的
获取索引
向ES服务器发送get
请求:http://localhost:9200/索引名
展示所有的索引
get
: http://localhost:9200/_cat/indices?v
删除索引
向ES服务器发送delete
请求:http://localhost:9200/索引名
文档数据的操作
添加文档数据
向ES服务去发送post
请求:http://localhost:9200/索引名/_doc[/文档ID]
请求体数据:
{
"title": "小米手机",
"category": "小米",
"images": "http:www.gulixueyuan.com/xm.jgp",
"price": 3999.00
}
- 不推荐使用索引ID,ES服务器会先去查询ID是否存在然后添加
- 添加时发送
post
请求他不是幂等性的所以同样的请求体多次请求会产出多条数据 - 添加事如果发送的是
put
请求,一点要带上ID,put
请求是幂等性的,还可以使用`http://localhost:9200/索引名/_create/ID
修改文档数据
全量修改
向ES服务器发送put
请求:http://localhost:9200/_doc/ID(全量修改数据是幂等性的所以可以使用put
请求)
请求体数据:
{
"title": "小米手机10",
"category": "小米",
"images": "http:www.gulixueyuan.com/xm.jgp",
"price": 4999.00
}
局部修改
向ES服务器发送post
请求:http://localhost:9200/索引名/_update/ID(局部修改数据不是幂等性所以使用post
请求)
请求体数据:
{
"doc":{ // 表示对文档进行修改
"title": "华为手机" // 修改字段:修改内容
}
}
查询文档数据
向ES服务器发送get
请求:http://localhost:9200/索引名/_doc/ID(查询单独的文档)
向ES服务器发送get
请求:http://localhost:9200/索引名/_search(查询所有的文档)
删除数据
向ES服务器发送delete
请求:http://localhost:9200/索引名/_doc/ID
- 多次删除就是
not_found
查询
条件查询
请求方式:get
通过查询参数完成条件查询
- url: http://localhost:9200/索引名/_search?q=查询字段:查询条件
通过请求体完成条件查询
-
url: http://localhost:9200/索引名/_search
请求体数据:
-
match匹配查询
{ "query": { // 表示查询 "match":{ // 匹配查询 "查询字段":"查询条件" } } }
-
match_phrase完全匹配查询
{ "query": { // 表示查询 "match_phrase":{ // 完全匹配查询 "查询字段":"查询条件" } } }
-
match_all全量查询
{ "query": { // 表示查询 "match_all":{ // 全量查询 } } }
-
highlight查询显示高亮
{ "query": { // 表示查询 "match_phrase":{ // 匹配查询 "查询字段":"查询条件" } }, "highlight": { // 高亮 "fields": { // 高亮字段 "匹配显示高亮字段": {} } } }
-
aggs聚合操作
-
分组
{ "aggs": { // 聚合操作 "统计结果名称": { // 统计结果名称,随意起名没有特殊含义 "terms": { // 分组 "field": "聚合操作的字段" // 分组字段 } } }, "size": 0 // 不显示原始数据 }
-
平均值
{ "aggs": { // 聚合操作 "统计结果名称": { // 统计结果名称,随意起名没有特殊含义 "avg": { // 平均值 "field": "聚合操作的字段" // 平均值字段 } } }, "size": 0 // 不显示原始数据 }
-
-
from/size分页查询
{ "query": { // 表示查询 "match_all":{ // 全量查询 } }, "from": 0, // 起始位置 "size": 2, // 查询条数 }
-
_source显示字段
{ "query": { // 表示查询 "match_all":{ // 全量查询 } }, "from": 0, // 起始位置 "size": 2, // 查询条数 "_source": ["字段1", "字段2", ...] // 结果显示的字段 }
-
sort排序
{ "query": { // 表示查询 "match_all":{ // 全量查询 } }, "from": 0, // 起始位置 "size": 2, // 查询条数 "_source": ["字段1", "字段2", ...], // 结果显示的字段 "sort": { // 排序 "price": { // 排序字段 "order": "desc/asc" // 排序方式:降序、升序 } } }
-
多条件查询
多条件同时满足
-
url: http://localhost:9200/索引名/_search
请求体数据:
-
must同时满足
{ "query": { "bool": { // 布尔值 "must": [ // 多个条件同时满足 相当于and { "macth": { // 匹配查询 "查询字段1": "查询条件1" } }, { "macth": { "查询字段2": "查询条件2" } } ] } } }
-
should满足其中一个
{ "query": { "bool": { // 布尔值 "should": [ // 多个条件同时满足 相当于or { "macth": { // 匹配查询 "查询字段1": "查询条件1" } }, { "macth": { "查询字段1": "查询条件2" } }, { "macth": { "查询字段2": "查询条件2" } } ] } } }
-
filter范围查询
{ "query": { "bool": { // 布尔值 "should": [ // 多个条件同时满足 相当于or { "macth": { // 匹配查询 "查询字段1": "查询条件1" } } ], "filter": { // 过滤 "range": { // 范围 "需查询范围的字段": { // 指定字段 "gt": 5000 // gt:大于 lt: 小于 gte:大于等于 lte: 小于等于 } } } } } }
-
-
保存文档数据是ES会将数据文字进行分词、拆解操作,并将拆解后的数据集保存到倒排索引之中,这样我们即使使用文字的一部分可以查询到数据,这个检索方式就是全文检索
映射关系
创建文档的数据类型(映射)
向ES服务器发送put
请求创建一个新的索引:http://localhost:9200/新索引名/_mapping(表示映射关系)
请求体数据:
{
"properties": { // 属性
"name": { // 指定字段
"type": "text", // 文本类型支持分词
"index": true // 可被索引查询
},
"gender": {
"type": "keyword", // 关键词不可以被分词
"index": true
},
"tel": {
"type": "keyword",
"index": false // 不可被索引查询
}
}
}