增删改
注:以下HTTP请求省略ip和端口,例如
"http://192.168.181.130:9200/megacorp/employee/aaa" 将简写为 "/megacorp/employee/aaa"
官方API
https://www.elastic.co/guide/cn/elasticsearch/guide/current/search-in-depth.html
1.增加、更新文档
#当该文档存在时将进行更新
PUT /megacorp/employee/aaa
{
"first_name" : "John",
"last_name" : "Smith",
"age" : 25,
"about" : "I love to go rock climbing",
"interests": [ "sports", "music" ]
}
#megacorp--> 索引名称
#employee-->类型
#aaa-->文档的id
局部更新
POST /megacorp/employee/aaa/_update
{
"doc": {
"last_name": "f1lk"
}
}
2.删除文档
DELETE /megacorp/employee/aaa
文档的检索
1.根据索引、 类型和ID
GET /megacorp/employee/aaa
2.根据索引和类型
#返回megacorp索引的所有employee数据
GET /megacorp/employee/_search
3.简单条件查询
GET /megacorp/employee/_search?q=last_name:Smith
4使用DSL语句查询
DSL(Domain Specific Language特定领域语言)以JSON请求体的形式出现
#match-->分词模式匹配计算相关性
POST /megacorp/employee/_search
{
"query": {
"match": {
"last_name": "Smith"
}
}
}
#短语搜索 模糊匹配
POST /megacorp/employee/_search
{
"query": {
"match_phrase": {
"about": "rock climbing"
}
}
}
5.聚合
5.x的版本的聚合这些操作用单独的数据结构(fielddata)缓存到内存里了,故做聚合前需要针对text类型的字段的聚合设置开启(一般不建议对text 类型做分组聚合),其他类型的字段无需设置
简单来说就是在聚合前执行如下操作
PUT megacorp/_mapping/employee/
{
"properties": {
"interests": {
"type": "text",
"fielddata": true
}
}
}
这样就可以针对"interests"字段做聚合搜索了
POST /megacorp/employee/_search
{
"aggs": {
"all_interests": {
"terms": { "field": "interests" }
}
}
}