一、索引雇员文档
1.一个ES集群可以包含多个索引,相应的每个索引可以包含多个类型。不同的类型存储着多个文档,每个文档又有多个属性。
1)索引(名词)——索引类似于传统关系数据库中的一个数据库。
2)索引(动词)——索引一个文档就是存储一个文档到索引中,以便与他可以被检索和查询到。类似于INSERT关键词,存在时新文档会替换旧文档。
3)倒排索引:类似于关系型数据库的索引或者B-tree。
4)默认,一个文档中的每一个属性都是被索引的和可搜索的,一个没有倒排索引的属性是不能被搜索到的。
2.对于雇员目录:
- 每个雇员索引一个文档,包含该雇员所有信息;
- 每个文档都是employee类型的;
- 该文档位于索引megacorp内;
- 该索引保存在我们的ES集群内
3.操作
1)插入雇员信息
PUT /megacorp/employee/1
{
"first_name" : "John",
"last_name" : "Smith",
"age" : 25,
"about" : "I love to go rock climbing",
"interests": [ "sports", "music" ]
}
复制代码
2)查询某个雇员
GET /megacorp/employee/1
3)查询所有官员
GET /megacorp/employee/_search
4)模糊搜索
GET /megacorp/employee/_search?q=last_name:Smith
5)查询表达式
GET /megacorp/employee/_search
{
"query" : {
"match" : {
"last_name" : "Smith"
}
}
}
复制代码
6)过滤器
GET /megacorp/employee/_search
{
"query" : {
"bool": {
"must": {
"match" : {
"last_name" : "smith"
}
},
"filter": {
"range" : {
"age" : { "gt" : 30 }
}
}
}
}
}
复制代码
7)全文检索
GET /megacorp/employee/_search
{
"query" : {
"match" : {
"about" : "rock climbing"
}
}
}
复制代码
ES默认按照相关性得分排序,第一个最高得分的结果。 相关性,完全区分传统关系型数据库的一个概念。
8)短语搜索
GET /megacorp/employee/_search
{
"query" : {
"match_phrase" : {
"about" : "rock climbing"
}
}
}
复制代码
9)高亮搜索——检索内容高亮
GET /megacorp/employee/_search
{
"query" : {
"match_phrase" : {
"about" : "rock climbing"
}
},
"highlight": {
"fields" : {
"about" : {}
}
}
}
复制代码
10)聚合(aggregations)
GET /megacorp/employee/_search
{
"aggs": {
"all_interests": {
"terms": { "field": "interests" }
}
}
}
复制代码
Elasticsearch 尽可能地屏蔽了分布式系统的复杂性。这里列举了一些在后台自动执行的操作:
- 分配文档到不同的容器 或 分片 中,文档可以储存在一个或多个节点中
- 按集群节点来均衡分配这些分片,从而对索引和搜索过程进行负载均衡
- 复制每个分片以支持数据冗余,从而防止硬件故障导致的数据丢失
- 将集群中任一节点的请求路由到存有相关数据的节点
- 集群扩容时无缝整合新节点,重新分配分片以便从离群节点恢复