- 名词解释
Relational DB -> Databases -> Tables -> Rows -> Columns
Elasticsearch -> Indices -> Types -> Documents -> Field
- 建立索引(相当于建立数据库i)
PUT /megacorp/employee/1
{
"first_name" : "John",
"last_name" : "Smith",
"age" : 25,
"about" : "I love to go rock climbing",
"interests": [ "sports", "music" ]
}
- 检索文档(相当于查询某一条数据)
GET /megacorp/employee/1
检索结果:
4. 简单搜索
4.1 搜索全部员工
GET /megacorp/employee/_search
结果:
4.2 轻量级搜索,们搜索姓氏中包含“Smith”的员工
这种方法常被 称作查询字符串(query string)搜索,因为我们像传递URL参数一样去传递查询语句:
GET /megacorp/employee/_search?q=last_name:Smith
结果略
- 使用DSL语句查询
DSL(Domain Specific Language特定领域语言)以JSON请求体的形式出现。我们可以这样表示之前关于“Smith”的查询:
GET /megacorp/employee/_search
{
"query" : {
"match" : {
"last_name" : "Smith"
}
}
}
这会返回与之前查询相同的结果。你可以看到有些东西改变了,我们不再使用查询字符串(query string)做为参数,而是使用 请求体代替。这个请求体使用JSON表示,其中使用了 match 语句(查询类型之一,具体我们以后会学到)。
- 更复杂的搜索
- 全文搜索
结果及说明
- 短语搜索
- 高亮搜索
结果及说明
- 分析(聚合)
Elasticsearch有一个功能叫做聚合 (aggregations),它允许你在数据上生成复杂的分析统计。它很像SQL中的 GROUP BY 但是功能更强大。
结果:
我们可以看到两个职员对音乐有兴趣,一个喜欢林学,一个喜欢运动。这些数据并没有被预先计算好,它们是实时的从匹配 查询语句的文档中动态计算生成的。
- 例2
我们想知道所有姓"Smith"的人最大的共同点(兴趣爱好),我们只需要增加合适的 语句既可:
结果:
10.1 聚合也允许分级汇总
例如,让我们统计每种兴趣下职员的平均年龄:
结果:
摘自:es权威指南