什么是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 (路小磊翻译)
所有评论(0)