本示例elasticsearch版本7.1,之前的版本请勿参考
API基本格式 http://<ip>:<port>/<索引>/<类型>/<文档id>
常用HTTP动词 GET/POST/PUT/DELETE
代码参考:
Elasticsearch 基本操作(CURD)PHP类
创建索引
请求地址:127.0.0.1:9200/索引名
请求方法:PUT
请求内容:
{
"settings":{
"number_of_shards": 3,
"number_of_replicas": 1
},
"mappings":{
"properties":{
"name":{
"type":"text"
},
"country":{
"type":"keyword"
},
"age":{
"type":"integer"
},
"date":{
"type":"date",
"format":"yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"
}
}
}
}
给指定索引添加category字段
请求地址:127.0.0.1:9200/索引名/_mapping
请求方法:PUT
请求内容:
{
"properties":{
"category":{
"type":"text"
}
}
}
插入
请求地址:127.0.0.1:9200/索引名/_doc
请求方法:POST
请求内容:
{
"name":"张三",
"age":24,
"date":"2019-06-17 11:12:36",
"country":"中国"
}
修改
请求地址:127.0.0.1:9200/索引名/_doc/1/_update
请求方法:POST
请求内容:
方法1
{
"doc":{
"name":"李四"
}
}
方法2
{
"script":{
"lang":"painless",
"inline":"ctx._source.age += 10"
}
}
方法3
{
"script":{
"lang":"painless",
"inline":"ctx._source.age = params.age",
"params":{
"age":100
}
}
}
删除
请求地址:127.0.0.1:9200/索引名/_doc/1
请求方法:DELETE
请求内容:
根据id查询一条
请求地址:127.0.0.1:9200/索引名/_doc/1
请求方法:GET
查询
请求地址:127.0.0.1:9200/索引名/_search
请求方法:POST
请求内容:
//查询该索引中的所有数据
{
"query":{
"match_all":{}
}
}
//根据name字段模糊查询
{
"query":{
"match":{
"name":"鬼剑士"
}
}
}
//根据name字段模糊查询并根据kucun字段降序显示
{
"query":{
"match":{
"name":"故事"
}
},
"sort":{
"kucun":{"order":"desc"}
}
}
//根据kucun字段分组 (group by) 想查询多个字段分组就往group_by_kucun后面添加
{
"aggs":{
"group_by_kucun":{
"terms":{
"field":"kucun"
}
}
}
}
//计算数据常用聚合函数 ps:如果只需要某个聚合函数就把stats关键字替换成需要的聚合函数
{
"aggs":{
"kucun_count":{
"stats":{
"field":"kucun"
}
}
}
}
计算数据常用聚合函数示例
高级查询(Query Context)
请求地址:127.0.0.1:9200/索引/_search
请求方法:POST
请求内容:
//模糊匹配name字段中含 "爱情故事合集" 的一条数据
{
"query":{
"match_phrase":{
"name":"爱情故事合集"
}
}
}
//在type、name字段中模糊匹配有 "爱情" 关键字的数据
{
"query":{
"multi_match":{
"query":"爱情",
"fields":["type","name"]
}
}
}
//在整个索引中搜索内容有 "垃圾" 和 "合集" 的数据或者有 "悬疑" 的数据(模糊匹配)
{
"query":{
"query_string":{
"query":"(垃圾 and 合集) or 悬疑"
}
}
}
//在type、name字段中模糊匹配 "垃圾" 或者 "悬疑" 的数据
{
"query":{
"query_string":{
"query":"垃圾 or 悬疑",
"fields":["type","name"]
}
}
}
//查询库存字段等于600的数据
{
"query":{
"term":{
"kucun":600
}
}
}
//查询kucun >=350 and kucun <= 600 之间的数据
// gte >=
// lte <=
// gt >
// lt <
//如果拿时间做查询 now 就是当前时间的意思
{
"query":{
"range":{
"kucun":{
"gte":350,
"lte":600
}
}
}
}
高级查询(Filter Context)
请求地址:127.0.0.1:9200/索引/_search
请求方法:POST
请求内容:
//查询kucun字段等于350的数据
{
"query":{
"bool":{
"filter":{
"term":{
"kucun":350
}
}
}
}
}
Filter 除了和 Query语法上有点区别以外 Filter 内部也会做一些缓存,所以Filter比Query更快一些
高级查询(复合查询)
请求地址:127.0.0.1:9200/索引/_search
请求方法:POST
请求内容:
//模糊匹配name字段中存在 "故事" 的数据并赋予_score值为2
{
"query":{
"constant_score":{
"filter":{
"match":{
"name":"故事"
}
},
"boost":2
}
}
}
//模糊匹配name字段中存在 "鬼剑士" 或者 kucun字段中 等于600的数据
//ps:(在integer的字段match是等于的意思)
{
"query":{
"bool":{
"should":[
{
"match":{
"name":"鬼剑士"
}
},
{
"match":{
"kucun":600
}
}
]
}
}
}
//模糊匹配name字段中的有 "鬼剑士" 并且 kucun字段等于 350
//如果查询出来的数据是多条filter过滤只取kucun字段等于350的数据
{
"query":{
"bool":{
"must":[
{
"match":{
"name":"鬼剑士"
}
},
{
"match":{
"kucun":350
}
}
],
"filter":[
{
"term":{
"kucun":350
}
}
]
}
}
}
//查询type字段不等于 "垃圾" 的所有数据
{
"query":{
"bool":{
"must_not":{
"term":{
"type":"垃圾"
}
}
}
}
}