Elasticsearch 6 新特性与重要变更解读

2017年11月14日,Elastic Stack 6.0正式亮相,这篇文章总结Elasticsearch 6.0版本的一些新的特性和重要改变,根据官网文档,变更部分包括下列部分,下面一一说明。

Aggregations changes
Cat API changes
Clients changes
Cluster changes
Document API changes
Indices changes
Ingest changes
Java API changes
Mapping changes
Packaging changes
Percolator changes
Plugins changes
Reindex changes
REST changes
Stats and info changes
Search and Query DSL changes
Settings changes
Scripting changes

一、Mapping changes

1.规范布尔类型的取值

Elasticsearch 6.0 之前的版本中,布尔类型的取值可以是 true, false, on, off, yes, no, 0, 1等,6.0之后只接受true和false,否则会抛出异常。

2.默认关闭_all元字段

_all字段可以包含其它字段的内容,作为超级字段做模糊(这里的模糊指不清楚搜索哪个字段的情况)搜索,Elasticsearch 6.0开始 _all字段默认关闭。

3.include_in_all失效

因为_all字段默认关闭,索引的mapping中也不再支持include_in_all。

二、Document API changes

2.1 版本类型移除force

2.2 upserts操作不再支持版本

2.3 index api中移除created 字段

2.4 delete api中移除found字段

三、Indices changes

3.1 索引模板使用index_patterns取代template

最新的设置索引模板的方法:

PUT _template/template_1
{
  "index_patterns": ["te*", "bar*"],
  "settings": {
    "number_of_shards": 1
  }
}
PUT _template/template_2
{
  "index_patterns": "te*",
  "settings": {
    "number_of_shards": 1
  }
}

3.2 Shadow replicas移除

没什么用,已经移除。下面这几个配置没有用了:

  • index.shared_filesystem
  • index.shadow_replicas
  • node.add_lock_id_to_custom_path

3.3 索引开关API的改变

Open/Close index API允许通配符为空。之前通配符匹配为空时会报错,现在返回结果默认返回true,换句话说,通配符没有匹配任何索引也不会报错。

四、client changes

Java High Level Client

从5.6版本开始,发布了Java High Level Client,使用Java High Level Client可以对Elasticsearch执行search, index, delete, update和bulk操作,和TransportClient 使用相同的Java核心类库。
Java High Level Client的设计目标是在未来取代TransportClient 。

五、cluster changes

path.data中不允许出现索引名

6.0之前的版本中path.data出现索引名会报warning,6.0之后不再支持。
假设path.data是: /tmp/mydata

之前:

$ tree /tmp/mydata
/tmp/mydata
├── <cluster_name>
│   └── nodes
│       └── 0
│           └── <etc>

6.0之后:

$ tree /tmp/mydata
/tmp/mydata
├── nodes
│   └── 0
│       └── 

六、Java API Changes

6.1 setSource方法需要指定XContentType 类型

6.0之前setSource方法可以不指定XContentType 类型,自动检测机制已经不再使用,6.0之后必须指定XContentType 类型。

6.2 DeleteByQueryRequest 必须显示指定一个query

6.0之前DeleteByQueryRequest 不指定query默认使用match all,很明显这种方式存在误删除的缺陷,6.0之后必须明确指定query。

https://www.elastic.co/guide/en/elasticsearch/reference/current/breaking-changes.html

你可能感兴趣的:(Elasticsearch)