6.4 KiB
6.4 KiB
Elastic Search
倒排索引
ES为文档型数据库,重要用于全文检索数据。ES通过倒排索引来加速全文检索。
索引基础操作
索引创建
若要创建自定义索引,可向ES服务器发送PUT请求。
PUT http://${url}:${port}/${ind_name}
PUT请求具有幂等性,如果对相同名称索引进行重复创建,那么第二次创建索引时请求会失败,提示待创建索引已经存在。
索引查询
如果想要查询已经创建的索引信息,可以向ES发送GET请求。
GET http://${url}:${port}/${ind_name}
查看所有索引
GET http://${url}:${port}/_cat/indices?v
删除索引
如果想要删除已经存在的索引,可以向ES发送DELETE请求。
DELETE http://${url}:${port}/${ind_name}
向索引中添加数据
可以通过向ES发送POST请求来向索引中添加文档内容,其中待添加数据为JSON格式
POST http://${url}:${port}/${ind_name}/_doc
==========JSON CONTENT BODY=============
向索引中添加内容是非幂等的,一个索引中可以包含多条数据。
查询索引中所有的数据
GET http://${url}:${port}/${ind_name}/_search
修改索引中指定文档的内容
如果要对索引中的文档内容进行修改,有两种修改的方式:
- 覆盖性修改,用新内容覆盖旧内容
- 局部修改,只针对原JSON格式数据中的部分内容进行修改
覆盖性修改
如果要对索引中的文档进行覆盖性修改,可以向ES发送PUT请求:
PUT http://${url}:${port}/${ind_name}/_doc/${doc_id}
==========JSON CONTENT BODY=============
局部数据更新
如果要对索引中的文档内容进行部分更新,可以向ES发送POST请求:
POST http://${url}:${port}/${ind_name}/_update/${doc_id}
==========JSON CONTENT BODY=============
对索引中的文档内容进行删除
DELETE http://${url}:${port}/${ind_name}/_doc/${doc_id}
索引内容条件查询
通过GET请求进行索引中文档的条件查询
GET http://${url}:${port}/${ind_name}/_search?q=${doc_field_name}:${doc_field_val}
通过POST请求进行索引中文档的条件查询
POST http://${url}:${port}/${ind_name}/_search
{
"query":{
"match":{
"category":"sword"
}
}
}
查询索引中所有的文档
POST http://${url}:${port}/${ind_name}/_search
{
"query":{
"match_all":{
}
}
}
索引内容分页查询
POST http://${url}:${port}/${ind_name}/_search
{
"query":{
"match_all":{
},
"from":0, // 查询偏移量,从0开始
"size":10 // 查询条数
}
}
索引中只查询文档的特定字段
如下示例只查询了文档中title和category字段的内容
POST http://${url}:${port}/${ind_name}/_search
{
"query":{
"match_all":{
},
"from":0, // 查询偏移量,从0开始
"size":10, // 查询条数
"_source":[
"title",
"category"
]
}
}
索引查询后对查询结果排序
POST http://${url}:${port}/${ind_name}/_search
{
"query":{
"match_all":{
},
"from":0, // 查询偏移量,从0开始
"size":10, // 查询条数
"_source":[
"title",
"category"
],
"sort":{
"price":{
"order":"desc"
}
}
}
}
多个查询条件进行组合
and
POST http://${url}:${port}/${ind_name}/_search
{
"query":{
"bool":{
"must":[
{
"match":{
"category":"sword"
}
},
{
"match":{
"price":100
}
}
]
}
}
}
or
POST http://${url}:${port}/${ind_name}/_search
{
"query":{
"bool":{
"should":[
{
"match":{
"category":"sword"
}
},
{
"match":{
"price":100
}
}
]
}
}
}
索引范围查询
POST http://${url}:${port}/${ind_name}/_search
{
"query":{
"bool":{
"should":[
{
"match":{
"category":"sword"
}
},
{
"match":{
"price":100
}
}
],
"filter":{
"range":{
"price":{
"gt":1000
}
}
}
}
}
}
索引分组查询
POST http://${url}:${port}/${ind_name}/_search
{
"aggs":{
${group_name}:{
"terms":{
"field":"price"
}
}
},
"size":0 // 只展示聚合后的结果,不展示原始数据
}
统计求平均值
POST http://${url}:${port}/${ind_name}/_search
{
"aggs":{
${group_name}:{
"avg":{
"field":"price"
}
}
},
"size":0 // 只展示统计后的结果,不展示原始数据
}
索引字段配置
可以通过如下方式来配置索引信息
POST http://${url}:${port}/${ind_name}/_mapping
{
"properties":{
${field_1}:{
"type":"text", // 该字段内容可被分词
"index":true // 该字段内容可被索引
},
${field_2}:{
"type":"keyword", // 该字段内容不可被分词
"index":true // 该字段内容可被索引
},
${field_3}:{
"type":"keyword", // 该字段内容不可被分词
"index":false // 该字段内容不可被索引,在索引查询时将该字段设置为查询条件会报错
}
}
}