花几分钟看一下Elasticsearch原理解析与性能调优
基本概念定义
- 一个分布式的实时文档存储 , 每个字段 可以被索引与搜索
- 一个分布式实时分析搜索引擎
- 能胜任上百个服务节点的扩展 , 并支持 PB 级别的结构化或者非结构化数据
- 全文检索
- 结构化搜索
- 分析
- 传统数据库提供精确匹配
- ES提供精确匹配全文检索处理同义词给文档相关性评分生成分析与聚合数据实时
- 索引(名词)类似于数据库
- 索引(动词)类似于insert 。 例如索引一个文档到一个索引
- 倒排索引默认每个属性都会有一个倒排索引 , 可以设置属性不被索引 , 它只能被覆盖 , 不能被修改
- 类型类似表 , 同一索引的不同类型 , 可以拥有不同的字段 , 但应该拥有大部分相似的字段 。 它可以包含大小写 , 不能包含句号 , 不能以下划线开头 , 长度限制为256.
- Id文档的id , 可以在生成文档时指定或自动生成 , 自动生成的ID , 在大部分情况下多个节点的时候唯一 。 如果在创建文档时 , ID冲突 , 服务器会返回409
- 文档类似于记录 , 文档只能被替换 , 而不能被修改 , 文档的字段类型需要一致 , 否则无法进行精确匹配
- 精确值字段对于数字 , 日期 , 布尔和一个not_analyzed字段 , 进行查询 , 会适用精确匹配
- 全文搜索字段否则 , 进行相关性搜索
PUT /megacorp/employee/1{"first_name" : "John","last_name" :"Smith","age" :25,"about" :"I love to go rock climbing","interests": [ "sports", "music" ]}
例如- megacorp是索引
- employee是类型
- 1是文档id
- json内容是文档
curl -X '://:/?' -d ''
VERB适当的 HTTP 方法 或 谓词 : GET、 POST、 PUT、 HEAD 或者 DELETE 。 PROTOCOLhttp 或者 https(如果你在 Elasticsearch 前面有一个 https 代理)HOSTElasticsearch 集群中任意节点的主机名 , 或者用 localhost 代表本地机器上的节点 。 PORT运行 Elasticsearch HTTP 服务的端口号 , 默认是 9200。 PATHAPI 的终端路径(例如 _count 将返回集群中文档数量) 。 Path 可能包含多个组件 , 例如:_cluster/stats 和 _nodes/stats/jvm。 QUERY_STRING任意可选的查询字符串参数 (例如 ?pretty 将格式化地输出 JSON 返回值 , 使其更容易阅读)BODY一个 JSON 格式的请求体 (如果请求需要的话)例子request:
curl -XGET 'http://localhost:9200/_count?pretty' -d '{"query": {"match_all": {}}}'
response:{"count" : 0,"_shards" : {"total" : 5,"successful" : 5,"failed" : 0}}
检索文档功能- 获取一个文档GET /megacorp/employee/1
- 简单查询GET /megacorp/employee/_search #查询前十条记录 GET /megacorp/employee/_search?q=last_name:Smith #查询smith的前十条记录
- 表达式查询GET /megacorp/employee/_search { "query" : { "match" : { "last_name" : "Smith" } } } GET /megacorp/employee/_search { "query" : { "bool": { "must": { "match" : { "last_name" : "smith" } }, "filter": { "range" : { "age" : { "gt" : 30 } } } } } }
- 全文检索GET /megacorp/employee/_search { "query" : { "match" : { "about" : "rock climbing" } } }
- 短语查询GET /megacorp/employee/_search { "query" : { "match_phrase" : { "about" : "rock climbing" } } }
- 分析(类似于聚合group by)request:GET /megacorp/employee/_search { "aggs" : { "all_interests" : { "terms" : { "field" : "interests" }, "aggs" : { "avg_age" : { "avg" : { "field" : "age" } } } } } } response: ... "all_interests": { "buckets": [ { "key": "music", "doc_count": 2, "avg_age": { "value": 28.5 } }, { "key": "forestry", "doc_count": 1, "avg_age": { "value": 35 } }, { "key": "sports", "doc_count": 1, "avg_age": { "value": 25 } } ] }
- 修改文档PUT /website/blog/123 { "title": "My first blog entry", "text": "I am starting to get the hang of this...", "date": "2014/01/02" } 旧文档不会马上删掉新文档会被索引文档的version会加一
- 删除文档DELETE /megacorp/employee/123 文档的version依然会加一
- 分配文档到不同的容器 或 分片 中 , 文档可以储存在一个或多个节点中
- 按集群节点来均衡分配这些分片 , 从而对索引和搜索过程进行负载均衡
- 复制每个分片以支持数据冗余 , 从而防止硬件故障导致的数据丢失
- 将集群中任一节点的请求路由到存有相关数据的节点
- 集群扩容时无缝整合新节点 , 重新分配分片以便从离群节点恢复
集群集群拥有一个或多个节点 , 当有节点加入或者退出集群时 , 集群会重新平均分配所有数据的分布
- 当初|这是我的第一部华为手机,当初花6799元买的,现在“一文不值”?
- 花15.5亿元与中粮包装握手言和 加多宝离上市又进一步?|15楼财经 | 清远加多宝
- 关注下方公|微信昵称可以加雪花了!好友看到后都懵了……
- 借贷消费|花呗该为网贷背锅吗
- 华为|华为P50系列曝光,满溢屏+挖孔设计,花粉还喜欢吗?
- SVIP|QQ开放QID身份号:SVIP也只能花10元修改一次
- 旗舰|先涨再降行不通了!双12购机认准这三款国产旗舰不花冤枉钱
- P系列|华为P40最新价格确定,价格亲民!花粉:后悔买Mate40了
- 深陷|信贷产品当道,年轻人深陷其中,“花呗们”该不该背锅?
- 买下|罕见收购!Facebook花10亿多美金买下了一家ToB公司