背景
原来一直用的ES6,刚转到ES7踩得一些坑,和一些新特性的学习过程。
- es6时,官方就提到了es7会删除type,并且es6时已经规定每一个index只能有一个type。在es7中使用默认的_doc作为type,官方说在8.x版本会彻底移除type。
- api请求方式也发送变化,对索引的文档进行操作的时候,默认使用的Type是 _doc
- 如获得某索引的某ID的文档:GET index/_doc/id其中index和id为具体的值
2.创建索引mapping关系的时候,容易出的错:Root mapping definition has unsupported parameters
- ElasticSearch6 中创建索引映射关系的语法
put es_test_index
{
"settings": {
"index": {
"analysis.analyzer.default.type": "ik_max_word"
}
},
"mappings": {
"item": { # type的名字 item【7.X没用了】
"properties": {
"site_id": {
"type": "long",
"index": True
},
"content": {
"type": "text"
}
}
}
}
}
- ElasticSearch7 中执行需要去掉 Type类型,修改为
put es_test_index
{
"settings": {
"index": {
"analysis.analyzer.default.type": "ik_max_word",
"number_of_shards":3,
"number_of_replicas":2
}
},
"mappings": {
"properties": {
"site_id": {
"type": "long",
"index": True
},
"content": {
"type": "text"
}
}
}
}
//_type(隐性)替代方案在 document中新增 type字段或者其他字段进行区分
PUT twitter
{
"mappings": {
"_doc": {
"properties": {
"type": { "type": "keyword" }, # 1
"name": { "type": "text" },
"user_name": { "type": "keyword" },
"email": { "type": "keyword" },
"content": { "type": "text" },
"tweeted_at": { "type": "date" }
}
}
}
}
PUT twitter/_doc/user-kimchy
{
"type": "user", # 2
"name": "Shay Banon",
"user_name": "kimchy",
"email": "shay@kimchy.com"
}
PUT twitter/_doc/tweet-1
{
"type": "tweet", # 3
"user_name": "kimchy",
"tweeted_at": "2017-10-24T09:00:00Z",
"content": "Types are going away"
}
GET twitter/_search
{
"query": {
"bool": {
"must": {
"match": {
"user_name": "kimchy"
}
},
"filter": {
"match": {
"type": "tweet" # 4
}
}
}
}
}
3.默认配置变化:默认节点名称为主机名,默认分片数为1,不再是5
- weak-and算法,又称为Wand算法, 输入是n个倒排队列,输出top K个得分最高的文档doc
5.彻底废除 _all 字段的支持,为提升性能默认不在支持全文检索
6.1 新增应用程序主动检测功能,搭配对应版本的kibana,用户可监测应用服务的健康状态,并在出现问题后及时发出通知
6.2 新增间隔查询(Intervals Queries),用户可设置多字符串在文档中出现的先后顺序进行检索
6.3 自带jdk,所以在安装ES时不再需要单独下载和配置JAVA_HOME。
取消Query结果中的Hits Count的支持(聚合查询除外),使得查询性能大幅提升。这就意味着,每次查询后将不能得到精确的结果集数量
6.4 的集群协调子系统,缩减配置项提升稳定性。时间戳纳秒级支持,提升数据精度
移除 minimum_master_nodes 参数,让 Elasticsearch 自己选择可以形成仲裁的节点。
典型的主节点选举现在只需要很短的时间就可以完成。
集群的伸缩变得更安全、更容易,并且可能造成丢失数据的系统配置选项更少了。
节点更清楚地记录它们的状态,有助于诊断为什么它们不能加入集群或为什么无法选举出主节点。
7.不会再有OOM(内存溢出)的情况,JVM引入了新的circuit breaker(熔断)机制,当查询或聚合的数据量超过单机处理的最大内存限制时会被截断,并抛出异常