什么是ElasticSearch?

ES,ElasticSearch 是一个开源的分布式全文检索引擎,类似于数据存储工具DB,提供便捷的实时查询 

 

包含什么组件?

Node:每一个Elasticseach都是一个节点(Node),运行着一个实例。

Cluster:多个节点构成的Elasticseach构成一个集群(cluster),提供故障转移,数据共享,扩展功能。

Shard:分片,某个类型的数据不会集中在固定的某个节点会分散到各个节点(Node)中存储,防止某个节点挂点,这个类型的数据不会全部丢失。

Replica:副本,是针对Shard分片,为了保证高可用性,会将分片备份,分散到其他节点,就算这个节点挂掉,其他节点也有相同的数据。

 

类型比较

MySql ElasticSearch
Database Index
Table Type
Row Document
Column Field
Schema Mapping
SQL Query DSL
Select * from table GET http://
UPDATE table SET PUT http://

 

 Elasticsearch概念

索引(indexing):  数据库的意思,可以有多个索引(数据库)

类型(Type): 对应数据库表的意思,一个索引有多个Type类型

文档(document):一个类型包含多个文档

列(Fields):每个文档又包含多个列

 

与Elasticsearch交互

JAVA API

 

RESTFUL API

curl -X<VERB> '<PROTOCOL>://<HOST>:<PORT>/<PATH>?<QUERY_STRING>' -d '<BODY>' 


curl -XGET 'http://localhost:9200/_count?pretty' -d '
{
  "query": {
  "match_all": {}
  }  
}
计算文档中的数量
VERB:     HTTP方法  GET POST PUT DELETE
PROTOCOL:   http或https
PATH:        路径,可以包含多个主键  _count 返回集群中文档数量,_cluster/stats,_nodes/stats/jvm
QUERY_STRING: 查询的请求参数,?pretty返回的json更加美观
BODY:    以json格式请求的主体

 入门实例CRUD

create

PUT /megacorp/employee/1 {   "first_name" : "John",   "last_name" : "Smith",   "age" : 25,   "about" : "I love to go rock climbing",   "interests": [ "sports", "music" ] }


index索引(数据库)   megacorp
type类型(表)     employee
id(id)        1

 简单查询

Query

根据id查询对应的信息
GET /megacorp/employee/1 


搜索全部员工
GET /megacorp/employee/_search 


轻量级搜素(字符串搜索)

查询字段对应value的数据
GET /megacorp/employee/_search?q=last_name:Smith 

复杂查询

DSL语句查询

GET /megacorp/employee/_search
{
  "query" : {
  "match" : {
    "last_name" : "Smith"
    }
  }
}


GET /megacorp/employee/_search
{
    "query":{
        "bool":{
            "filter":{
                "range":{
                    "age":{
                        "gt":30
                    }
                }
            },
            "must":[
                {
                    "match":{
                        "last_name":"smith"
                    }
                }
            ]
        }
    }
}

 全文检索

GET /megacorp/employee/_search
{
  "query" : {
    "match" : {
      "about" : "rock climbing"
    }
  }
}
会根据查询的相关度,进行排序!匹配度最高的放在前面

 短语搜索

搜索想匹配若干个单词或者短语

GET /megacorp/employee/_search
{
    "query":{
        "match_phrase":{
            "about":"rock climbing"
        }
    }
}

高亮搜索

将关键词高亮起来
GET /megacorp/employee/_search 

{
"query":{ "match_phrase":{ "about":"rock climbing" } }, "highlight":{ "fields":{ "about":{ } } } }

分析(提供一些聚合功能)

GET /megacorp/employee/_search

{
  "aggs": {
    "all_interests": {
    "terms": { "field": "interests" }
    }
  }
}



5.0之后聚合这些操作用单独的数据结构(fielddata)缓存到内存里了,需要单独开启

PUT megacorp/_mapping/employee/

{
    "properties":{
        "interests":{
            "type":"text",
            "fielddata":true
        }
    }
}


统计每种兴趣下职员的平均年龄
{
    "aggs":{
        "all_interests":{
            "terms":{
                "field":"interests"
            },
            "aggs":{
                "avg_age":{
                    "avg":{
                        "field":"age"
                    }
                }
            }
        }
    }
}

 

 

 

 资料

中文翻译网站  https://www.elastic.co/guide/cn/elasticsearch/guide/current/index.html

优秀博客资料  https://blog.csdn.net/laoyang360/article/details/52244917  https://blog.csdn.net/column/details/deep-elasticsearch.html

参考书籍   Elasticsearch权威指南clinton gormley,zachary tong  (路小磊翻译) 

 

posted on 2018-05-06 10:32  13725566749  阅读(181)  评论(0编辑  收藏  举报