ElasticSearch6更新与重大变化

截至 2018-06-10 Elasticsearch6.2.4html

Elasticsearch更新

  • 一般滚动更新,具体升级方案须要参考官网。
  • 小版本更新,能够一次对集群中的单节点滚动更新(不支持在非升级期间在集群中使用多个版本,新版本分片的更新不会复制到运行中的老版本节点上)
  • 主要版本更新须要重启整个集群
  • 跨主要版本升级不被支持
  • 须要检查是否用到了deprecated的特性
  • 须要检查各类插件(尤为是非官方的)的版本兼容性
  • 须要备份数据(跨主要版本建立的索引的快照数据没法恢复,而且会阻止Elasticsearch启动),若是没有备份数据,将没法回滚到以前的版本,在升级到下一个主要版本以前,对上一个主要版本建立的索引,须要进行重建索引(或者删除),让其在下个主要版本可用。
  • 在升级生产环境集群以前要先在开发环境下进行测试。
  • 滚动更新的过程
    • 关闭分片分配,关闭一个节点,从新分配分片须要大量的IO,当节点很快从新启动时,这些IO是没必要要的,能够关闭节点前经过禁用分配时钟避免这个过程。
    PUT _cluster/settings
     {
         "persistent":{
             "cluster.routing.allocation.enable": "none"
         }
     }
    • 中止非必要的索引,而且将数据刷入磁盘 在升级过程当中,仍然会持续索引,当临时关闭非必要索引,而且进行synced-flush将缓存刷入后,分片的恢复速度会快不少。 POST _flush/synced 当执行synced flush时,应该检查响应结果,确认写入是否成功,响应体会列出因为索引期间因为失败而挂起的同步操做,而返回状态码仍然为200。若是失败了,从新提交请求。
    • 关闭单节点
    • 更新关闭的节点 根据本来的安装方式更新(RPM|Debian|.tar.gz),以.tar.gz包解压安装的要注意各类配置的设置(尤为是本来没有设置过数据路径时,要特别注意,ES_PATH_CONF,path.data,path.logs)。解压安装时目录中会包含config,data,logs和plugins目录,推荐将这些目录移动到Elasticsearch目录外,使他们不会在你升级Elasticsearch时被(失误)删除。使用ES_PATH_CONF环境变量和path.data,path.logs设定指定新的位置。用包管理工具安装,会将这些目录放到系统的合适位置。在生产环境,推荐使用包管理工具。
    • 更新全部插件 使用elasticsearch-plugin 脚步更新全部安装的Elasticsearch插件版本。在更新一个节点时,全部的插件必须被更新。
    • 启动更新了的节点 启动节点并确认已经加入集群,经过 GET _cat/nodes 请求确认。
    • 从新启用分片分配
    PUT _cluster/settings
    {
      "persistent":{
        "cluster.routing.allocation.enalbe":null
      }
    }
    • 等待节点恢复 在开始更新下一个节点以前,等待集群完成分片分配。能够经过 GET _cat/health 请求检查进度。等待status列从yellow变为green。一旦node为green,全部的主分片和复制分片都已经被分配。滚动更新时,分配到新版本节点上的主分片不会分配复制分片到老版本节点。若是不能分配复制分片到其余节点(集群中仅有一个更新的节点),复制分片会一直保持未分配,status会保持yellow。这种状况下,只要没有初始化或重定位分片,就能够继续(检查init和relo列)。一旦有其余节点被更新,复制分片能够被分配(须要有复制数的其余分片更新),状态会变为green。未sync-flushed的分片可能须要更长时间来恢复。能够经过GET _cat/recovery请求监控独立分片的恢复状态。若是中止索引,一完成恢复就继续索引是安全的。
    • 重复 当节点完成恢复,集群稳定后,对每一个须要更新的节点重复这些步骤(更新整个集群)。在滚动更新期间,集群可以持续正常服务。然而,新的功能或向后的兼容模式操做在集群中全部节点完成更新以前仍不可用。一旦升级完成,全部节点在新的版本下运行,新的功能可被使用。一旦发生这种状况,就不能再回到一个向后兼容的模式。运行在之间主要版本的节点将没法加入彻底更新的集群。在少见的状况下,升级过程期间出现网络故障,会将剩余的老节点从集群中隔离出来,这时必须离线升级这些老节点来使他们加入集群。
  • 全集群重启升级
    • 全集群重启升级须要关闭关闭集群全部节点,进行更新,而后重启集群。在从以前的主版本升级时须要进行全集群重启更新(上一个主要版本,跨主要版本时不容许直接更新)。
    • 关闭分片分配
    • 关闭索引并执行 synced flush
    • 关闭全部节点
    • 更新全部节点
    • 更新全部插件
    • 启动每个被更新过的节点,若是有指定一些主要节点,在启用数据节点以前要最早启动他们,等待他们组成一个集群并选举出主节点。能够经过查看日志检查进度。一旦一个最小数量的主节点候选节点之间相互发现,他们将会组成一个集群并选举出一个主节点。在这时,就可使用 GET _cat/health GET _cat/nodes 请求检测加入集群的节点。
    • 等待全部节点加入集群,集群状态被报告为yellow 全部的主分片被分配(可用),在全部主分片可用以前,不要打开分片(自动)分配。
    • 从新打开分片分配,集群将复制分片分配给数据节点,这时,继续进行索引和搜索是安全的,可是若是可以等到全部主要和复制分片成功分配(全部节点状态为green),集群能更快恢复。能够经过_cat/health_cat/recoveryapi进行检测。
  • 跨主要版本更新
    • 本集群升级 (跨多个版本时须要进行屡次)
      • 在进行更新前对更早版本建立的索引重建索引或者删除。Elasticsearch可以读取前一个主版本建立的索引,更老的索引必须重建索引或删除。
      • 进行全集群重启升级(多数时候)。
    • 建立新版本集群,从远程集群直接导入索引
    • 对于基于时间的索引,过老版本的索引一般随着时间流逝变得无用,而且在保留周期过去后被删除。除非有一个少见的长保留周期的(用途),不然能够等到全部老版本索引被删除后进行更新。
  • (本集群)重建索引 使用reindex API重建老的索引
    • 使用老索引相同的mappings和settings建立新索引
    • 为了快速重建索引,能够设置refresh_interval-1number_of_replicas0
    • 使用 reindex API 将全部文档从老的索引从新索引到新的索引
    • 从新设置refresh_intervalnumber_of_replicas的值与老的索引中使用的相同
    • 等待索引状态变为green
    • 进行更新别名请求 删除老的索引 为新的索引添加老索引名的别名 添加全部老索引有的别名到新索引
    • X-Pack 5.6 提供迁移辅助与更新工具,可以方便的重建索引并升级到6.x
  • 从远端集群重建索引
    • 建立一个新版本的与老集群独立的集群,经过设置reindex.remote.whitelist: oldhost:httpport来开启对老索引的访问
    • 对于每个须要迁移的索引
      • 建立一个合适的mappings和settings的新索引,设置refresh_interval: -1number_of_replicas: 0来快速重建索引
      • 从远端老索引获取文档从新索引到新索引,使用POST _reindex重建索引,若是设置wait_for_completion: false让重建索引工做后台执行,reindex请求会返回一个 task_id ,能够经过使用 task API :GET _tasks/TASK_ID检测重建索引工做进度
      • 当重建索引工做完成后,设置refresh_intervalnumber_of_replicas为但愿的值(默认为30s(索引文档可读取时间)和1(复制分片数量))
      • 当全部复制完成,新索引的状态变为green之后,能够删除老索引。

重大变化

  • 聚合
    • 移除 terms聚合中include/exclude的 pattern元素,替代为直接做为include/exclude的值
    • date_range的from和to参数,如今依照format将总被解析为epoch_millis数值,其余如epoch_seconds的数值输入format,将再也不可用。如今经过目标字段的format解析这些参数。若是mappings中的format不兼容数字输入值,一种兼容格式(如epoch_millis,epoch_second)必须在date_range聚合时指定,不然会抛出错误。
    • 移除terms聚合中的 global_ordinals_hash 和 global_ordinals_low_cardinality,替代为global_ordinals(将在内部选择是否remap一个全局顺序到密集顺序或直接使用片断顺序)
  • 分析
    • 同义词token过滤器 Synonym Token Filter 将对任何分词器标记同义词,而且token filters 在链中在它以前, tokenizer 和 ignore_case 将被移除,在新的索引中使用时将被忽略。
    • 限制高亮时分析text的长度,高亮text分析在搜索请求时在内存中实时处理,过大的texts,分析可能占用大量的时间和内存。为了防止这种状况,被分析的最大字符数将在下个主要版本限制为1000000。如今在超过这个数值的分析text时,会输出deprecation警告信息。这个限制能够经过对索引设定 index.highlightt.max_analyzed_offset 根据索引指定。
  • cat API
    • 如今在未限制cat线程池队列大小时,queue_size列会输出-1,保证老是输出一个数值。
  • 客户端
    • 从5.6.0版本起,一个新的客户端 the Java High Level REST Client 被发布。这个高级客户端,将使用与 TransportClient 使用的相同的核心Java类,可以用来执行 search, index, delete, update 和 bulk 操做。这个Java高级客户端被设计用来在不久的未来代替 TransportClient
  • 集群
    • 集群名称再也不容许在path.data中使用(子目录)(如今path.data下应该直接为nodes目录)
  • Document API
    • 移除文档修改操做指定 version_typeforce 覆盖文档版本检查的操做
    • 再也不支持在 upsert 请求中添加一个 version
    • 在 Index API 及 bulk 的 index 和 create 操做中,移除了created字段(元素),使用operation字段代替。
    • 在 Delete API 及 bulk 的 delete 操做中,移除了found字段,应该使用operation字段代替。
  • Geo
    • 移除了 ShapeBuilders 辅助类,如今必须使用 builder的构造函数代替(如 new MultiPointBuilder())
    • 移除了 ShapeBuilder.parse 静态方法 使用 ShapeParser.parse 代替
  • 索引(Indices)
    • 索引模板使用 index_patterns 代替 template ,能够在一个数组中定义多个glob风格的通配模式,对于单个通配模式,也支持直接使用一个字符串,两种方式都是有效的
    • 移除影子复制分片(由于影子分片彷佛并无很大的用处)包括设定 index.shared_filesystem, index.shadow_replicas, node.add_lock_id_to_custom_path
    • 当没有匹配的索引时,是否容许Open/Close index API 使用通配表达式的设定 allow_no_indices的默认值从false改成true,与 Delete index API 一致。所以,当Open/Close index API 使用一个没匹配任何打开/关闭的索引的通配表达式时,不会返回一个错误。
    • 删除一个文档 从一个不存在的索引中删除一个文档被改变为不会建立这个索引。然而,若是这个索引使用了外部版本控制,索引将被建立,而文档将被标记为删除。
    • indices aliases api 仅针对索引解析索引表达式 update-aliases, put-alias 和 delete-alias API 再也不接受别名做为参数,他将仅接受索引(或使用通配符扩充索引匹配)
    • delete index api 仅针对索引解析索引表达式 delete index API 再也不接受别名做为参数,仅接受索引名(或通配符匹配索引)
    • 移除索引表达式的+ (遗漏+符号与使用具备相同效果,所以移除索引表达式中+的支持)
    • 事物日志的存留 事物日志如今默认保持12小时,默认最大大小为512mb,而且再也不在flush时删除,这是为了在请用一个复制加速时,基于操做的恢复的机会
    • NGramTokenFilter与NGramTokenizer的最大值与最小值之间差别的限制 为了防止建立太多索引术语,最大最小值差被限制为1,默认限制能够经过设置index.max_ngram_diff改变,若是超过限制会产生警告日志
    • ShingleTokenFilter最大最小值差别限制 为了防止建立过多tokens,默认限制ShingleTokenFilter最大最小值差值为3,默认限制能够经过堆索引设置 index.max_shingle_diff 属性改变,若是超过这个限制会输出警告日志
  • Ingest
    • Timestamp元数据字段类型从java.lang.String 改变为 java.util.Date
    • 字符串格式字段ingest.timestamp字段的格式改变 在以前须要使用ingest.new_date_format来让ingest.timestamp元数据字段被格式化为ES能够不须要进一步转换强制使用date类型,限制再也不须要这样了,而这个设置被移除,能够简单的经过在管线中设置一个字段到{{ingest.timestamp}}来得到date类型的字段而不会有任何mapping错误
  • Java API
    • setSource方法须要XContentType 以前setSource和其余方法接受字节/字符串对象源表示而不须要指定XContentType,自动侦测内容类型再也不使用,当提供字节或一个字符串做为source时,这些方法如今须要指定XContentType做为额外的参数XContentType
    • DeleteByQueryRequest 须要一个明确设置的query 以前的Elasticsearch版本中,使用一个没有明确指定query的delete by query请求会被接受,将会使用 match_all 做为默认query,会致使全部的文档被删除,限制必须明确设定query
    • 移除了InternalStats 和 Stats 的getCountAsString方法 若是有须要,改成使用String.valueOf(getCount())风格
    • 使用ActionRequestBuilder#execute 返回ActionFuture 而不是 ListenableActionFuter 当经过requeste builder 发送一个请求时,他曾经可能针对ListenableActionFuture调用addListener。替代为返回ActionFuture,与Client方法返回一致,所以关联listeners与future不可行。在 execute方法接受一个listener参数来替代
    • Terms.Order 和 Histogram.Order 类使用 BucketOrder代替 terms, histogram 和 date_histogram 聚合代码被重构为使用公共排序桶代码。必须使用BucketOrder代替Terms.Order和Histogram.Order,直接使用内部排序实例,必须使用BucketOrder类的静态方法代替。
    • 将getTookInMillis()从BulkResponse,SearchResponse和TermVectorsResponse中移除 使用getTook方法风格代替(getTook().getMillis())
    • 使用DocumentField代替GetField和SearchHitField GetField和SearchHitField有相同的成员,同一使用DocumentField
    • 一些聚合类移动到其余包 range聚合(geo_distance,date和ip)移动到org.elasticsearch.search.aggregations.bucket.range包 ,org.elasticsearch.search.aggregations.bucket.terms.support包中的类移动到org.elasticsearch.search.aggregations.bucket.terms,filter聚合类移动到org.elasticsearch.search.aggregations.bucket.filter
    • PercentileRanksAggregationBuilder的构造器改变 如今须要在builder的构造器中明确的non-null,non-empty浮点数数组,而不是经过builder的setter,相应的移除了setter方法values()
  • mapping
    • 强制bool字段 在以前,Elasticsearch会解析字符串 true, false, on, off, yes, no, 0, 1 为布尔值,如今仅解析字符串 true 和 false 为布尔值,其余的则会跑出异常。为了向后兼容,6.x版本提早强制使用规则,而以前主要版本创建的索引仍能工做。这意味着你不须要马上修改影响到的已存在的mappings,然而,经过一个已存在的违背严格boolean强制规则的索引模板创建索引是不可行的
    • _all元字段默认改成不启用 在新的mappings中,包含了全部字段文本复制的_all元字段默认不启用,在以前使用_all字段进行搜索的query_stringsimple_query_string如今将检查是否启用_all字段,并在_all字段禁用时执行跨越全部字段的query。_all字段在Elasticsearch6.0以后建立的索引中将再也不能够配置
    • include_in_all mapping参数再也不可用 因为新建立的mappings中禁用_all字段,include_in_all设置在这些索引中将再也不可用
    • 未识别的 match_mapping_type 选项不会silently ignored 先前的Elasticsearch会silently忽略包含不识别的match_mapping_type类型的动态模板,如今将会跑出一个未识别类型的异常
    • 日期字段的locale验证 先前date字段的locale选项容许几乎全部的字符串,未识别的值将会简单的被忽略,6.0以后在索引建立时未识别的值将被拒绝
  • packaging
    • 再也不运行package配置custom用户与组 以前能够经过指定$ES_USER 和 $ES_CROUP 变量指定运行Elasticsearch的用户与群组,如今使用DEB和RPM包仅容许使用 elasticsearch 用户群组。若是要使用custom的用户或群组,要使用tarball方式安装Elasticsearch
    • path.conf再也不是一个可配置的设置 以前使用设定path.conf 做为设定,你能经过在启动Elasticsearch时经过指定path.conf,Elasticsearch应该使用另外一个配置文件,这至关复杂。应该使用 ES_PATH_CONF 环境变量配置用户设定目录来替代
    • 移除了默认path设定 在以前的版本中,容许使用default.path.datadefault.path.logs来设置没有被设定文件中的其余设定覆盖时的默认数据路径和默认日志路径。这些设定被移除了,如今数据路径和日志路径仅能经过设定配置,相应的,经过packagin scripts设定default.path.data和default.path.logs的环境变量DATA_DIRLOG_DIR将再也不生效。另外,这意味着若是你使用分发包(如经过RPM或DEB分发包安装安装),在以前没有明确指定path.data或path.logs,在迁移配置文件时,必须增长path.datapath.logs的设定。使用以前的默认值,须要添加两行设定path.data: /var/lib/elasticsearchpath.logs: /var/log/elasticsearchelasticsearch.yml文件中。若是已经指定了,须要保留他们。若是不这么作,Elasticsearch将没法启动
    • 再也不维护32位 Elasticsearch以前尝试确保Elasticsearch能够在32位JVM上启动(虽然引导检测会阻止在生产环境中使用一个32位JVM),将再也不尝试维护他
    • 在Windows service上再也不过滤 -server标记 与以前32位再也不支持的改变相关,默认的jvm.option文件再也不包含-server标记。先前,因为与服务不兼容,在Windows service将过滤 -server 标记。因为jvm.options文件再也不包含 -server ,这个标记的过滤将在 Windows service 安装时移除,这意味着若是你的jvm.options文件包含这个标记,你须要移除他
    • 再也不支持ES_JVM_OPTIONS 容许jvm.options文件自定义位置的环境变量 ES_JVM_OPTIONS 被移除,促使使用环境变量 ES_PATH_CONF。这个环境变量已经在packaging中用来支持配置文件的定位,因此这个改变只是让jvm.options文件与其余配置文件放在一块儿
    • 再也不支持ES_INCLUDE 环境变量 ES_INCLUDE 以前可以用来创建用来启动Elasticsearch的环境(和各类支持脚本)。当有几个环境变量用来配置JVM选项时,这个遗留特性是有用的,这个功能被 Setting JVM options 代替了,所以,移除了 ES_INCLUDE
  • Percolator
    • 弃用了percolator,删除了mpercolate apis 应该经过search 或者 msearch apis 来代替 percolate query
    • 弃用了percolator.map_unmapped_fields_as_string设定 应该使用percolator.map_unmapped_fields_as_text设定来代替
  • Plugins https://www.elastic.co/guide/en/elasticsearch/reference/current/breaking_60_plugins_changes.html
  • Reindex
    • size参数 size参数不能再指定为-1。若是须要全部的文档,那么不该该设置size参数
  • REST
    • Unquoted JSON 在之前的版本,JSON文档容许包含一些未用引号的字段名,并非一个严格的JSON,而且会致使一些ELasticsearch客户端断开,因此这个特性被移除了
    • 在JSON,CBOR,Yaml和Smile中重复的键 在以前的Elasticsearch版本中,文档容许包含重复的键,Elasticsearch6.0强制全部的键惟一,应用于全部的内容类型:JSON、CBOR、Yaml和Smile
    • Content-Type Auto-detection 在Elasticsearch之前的版本中,不强制要求请求中适当的内容类型(Content-Type),在Elasticsearch6.0强制全部带有请求体的请求必须包含一个支持的内容类型,这种类型将用来解析数据。当在source查询字符串参数时,一样要指定source_content_type参数指定源媒体类型
    • Boolean API parameters 全部的REST APIs 的参数(包括请求参数和JSON body)对boolean只提供falsetrue做为值,全部其余的值将致使一个错误
    • Analyze API 使用请求参数和请求体中纯文本(text/plain)的请求方式被移除了,使用JSON文本参数
    • Analyze API中自定义归一化(标准化 normalizer)支持 Analyze API 可以分析normalizer和自定义normalizer,在之前的版本,Analyze API 须要一个tokenizer或者analyzer参数,在Elasticsearch6.0,若是设定了char_filter/filter而且没有设定tokenizer/analyzer,Analyze API 可以分析文本为自定义标准化关键字字段
    • 索引请求的timestamp和ttl 在index/update请求中,timestamp和ttl参数将再也不接受
    • 在Refresh请求中有一个或更多分片失败时将返回Http500响应取代200状态码 Refresh请求广播到多个分片,期间至少有一个分片失败时将会用响应500来代替响应200
    • Delete by Query API 须要一个明确的query 在以前,一个没有明确的query的经过query删除请求会被接受,会致使使用match_all删除全部文档,在Elasticsearch6.0起,delete by query 请求须要一个明确的query
    • DELETE document 调用如今隐式建立type 运行 DELETE index/type/id 当type不存在时,如今会经过default mapping隐式建立type
    • Indices information APIs 之前能经过执行 GET /_aliases,_mappingsGET /myindex/_settings,_alias 使用逗号分割多种请求类型获取一个或多个索引的多种类型信息,逗号分割获取多种信息片断的用法已经被移除了。使用 GET /_all 获取全部索引 aliases,settings,mappings 信息。使用 GET /myindex/_mapping|_alias|_settings 获取一个索引对应信息
    • 使用不适当的HTTP方法请求一个存在的端点如今返回405响应 使用不适当的HTTP请求方法(如一个POST请求到/myindex/_settings)将返回一个HTTP405响应来代替404。一个Allow头将被添加到405响应中,包含容许的方法(动做)
    • 禁止_cache和_cache_key的使用 如今请求中的_cache_cache_key选项被彻底移除了,使用他们将抛出一个错误
    • IndexClosedException返回400状态码 当设定ignore_unavilable为false时,对一个关闭的索引调用全部在关闭的索引上不支持的api,将返回一个IndexClosedException,响应状态码将从403改变为400
  • Scripting
    • 移除Groovy,JavaScript和Python语言 移除Groovy,JavaScript和Python脚本语言,使用painless代替
    • Native scripts removed 移除了本地脚本,经过implement a ScriptEngine代替
    • Date字段如今返回dates doc.some_dete_field.value如今返回ReadableDateTime来取代epoch以来毫秒数的long值。doc.some_date_field[some_number]也是同样。若是有须要,使用doc.some_date_field.value.millis来获取epoch以来的毫秒数
    • 移除内部访问索引的_index变量 _index变量如今被移除了,若是你须要用他来进行高级排序,考虑写一个Similarity插件
    • Script Settings 移除了全部现有的脚本安全设定,使用script.allowed_typesallowed_contexts代替
    • 当使用stored script做为请求的一部分时,不能再指定lang 不能再指定lang变量为使用了stored script的请求的一部分,不然会出现一个错误。注意一个使用了stored script的请求与puts一个stored script的请求是不一样的。脚本的语言已经做为集群状态的一部分储存,执行stored script使用id已经能够获取全部必要的信息
    • 在putting|getting|deleting一个stored script时不能再使用lang 在使用_scripts/路径执行PUT|GET|DELETE动做的stored script时,不能再指定lang参数为url的一部分。全部的stored scripts必须有一个惟一的id做为命名空间,如今仅有id而再也不有langid
    • 移除了Stored search template apis 移除了PUT|GET|DELETE 的_search/templateapis,使用带store search templates的stored script api来代替
  • Search and Query DSL
    • changes to queries
      • 移除了span_near query的collect_payloads 参数,payloads将在须要时加载
      • 如今严格解析boolean字段的值,即仅字符串"true"和"false"能被解析为他们对应的bool值,其余字符串将抛出一个异常
      • 移除了in query(与terms query相似)
      • 移除了geo_bbox query(与geo_bounding_box query相似)
      • 移除了mlt query(与more_like_this query相似)
      • 移除了more_like_this query的like_text|ids|docs参数(都与like相似),min_word_len(与min_word_length相似),max_word_len(与max_word_length相似)
      • 移除了fuzzy_matchmatch_fuzzy query(与match query相似)
      • terms query如今老是返回1,而且再也不是indices.query.bool.max_clause_count的主体
      • 移除了indices query
      • 从query DSL中移除了堆空查询对象({ })的支持,当使用一个空查询对象时将会抛出一个异常
      • bool query的minimum_number_should_match被移除,应该使用minimum_should_match代替
      • 如今query_string query在使用max_determinized_states将容许正确解析最大状态数量
      • query_string query再也不接受enable_position_increment,使用enable_position_increments代替
      • 对与geo_distance查询、排序和聚合,在distance_type参数中移除了sloppy_arc选项
      • 移除了geo_distance_range query
      • geo_distance query中移除了optimize_bbox参数
      • geo_bounding_box|geo_polygon|geo_distance query中移除了ignore_malformed|coerce参数
      • bool|common_terms queries中移除了disable_coord参数,若是提供了,将被无视并输出弃用警告
      • 移除了template query
      • 废弃了percolate query的document_type,不能再指定document_type参数
      • query_string query的split_on_whitespace参数,若是提供了,会输出废弃警告。query_string query如今仅使用操做符分割
      • 移除了query_string query中的use_dis_max参数,必须使用tie_breaker参数代替
      • 移除了query_string query的auth_generate_phrase_queries参数,使用明确引用的query
      • 移除了query_stringsimple_query_stringall_fields参数,使用设置default_field为*`代替,若是提供了,default_field会自动设置为*
      • terms过滤器中的index参数如今是强制的(用来在专门的索引中查找terms),在以前,index默认为执行query的index,如今index必须在请求中明确设定
      • match query中的typeslop参数被移除了,使用match_phrasematch_phrase_prefix来代替设置type。从match移除了slop可是在match_phrasematch_phrase_prefix支持了
      • 移除了match_phrase query的phrase_slop参数(与slop参数类似)
      • 移除了constant_score query中的query参数(与filter参数类似)
      • 从multi_match query中移除了phrase_slop参数(与slope参数类似)
      • prefix query中移除了prefix参数(与value参数类似)
      • range query中移除了le(与lte类似)和ge(与gte类似)
      • 移除了ids query中与type类似的types_type参数
      • 移除了与constant_score类似的constant_score_autoconstant_score_filter
    • Search shards API search shards API再也不接受type url参数
    • Profile API time字段显示人类可读的时间输出被显示使用纳秒数的time_in_nanos字段代替,能够经过在请求url中加上?human=true打开time字段,将会显示取整的人类可读的时间值
    • Scoring changes
      • Query normalization 移除了query normalization。这意味着TF-IDF类似再也不尝试产生经过across queries生成比较分,boosts如今如今做为简单的乘法因子集成到分数中。其余类似性不会被影响,由于他们没有进行分值归一化而且已经将boosts做为乘法因子集成到分数中了,经过LUCENE-7347查看更多信息 https://issues.apache.org/jira/browse/LUCENE-7347
      • Coordination factors 从评分公式中移除了coordination factors。这意味着boolean queries再也不基于匹配的条件数量评分,相反,他们老是返回子句的总分。所以,如今不鼓励使用TF-IDF类似度做为产生类似性分值质量的重要组件。推荐使用BM25来代替。经过LUCENE-7347查看更多信息 https://issues.apache.org/jira/browse/LUCENE-7347
    • _uid字段数据 废弃了_uid字段数据,能够改成使用_id代替,而他(_id)仍没有被启用的缘由是由于在random_score function中被使用(没有设定一个seed字段时,默认会用_id,但会消耗大量内存,不设定seed字段的用法弃用)。若是你真的须要获取文档id来排序、聚合或搜索,推荐冗余id做为文档的一个字段
    • 高亮 unified高亮时新的默认高亮选择。这个补偿策略对每一个字段高亮依赖于字段类型(index_options)内部精选。强制指定fvhplain类型的高亮还是可用的。postings高亮从Lucene和Elasticsearch中移除了。当index_options选项设置为offsets时,unified高亮输出一样的highlighting
    • fielddata_fields 移除了fielddata_fields,应该用docvalue_fields代替
    • docvalue_fields docvalue_fields如今默认最多请求100字段,能够经过使用index.max_docvalue_fields_search索引设定覆盖
    • script_fields script_fields如今默认请求最大限制32个script fields,能够经过使用索引设定index.max_script_fields设定
    • Inner hits 内部hits命中的source保持相对于整个source的相对路径,在最先的版本,source字段会关联到内部hit
    • Scroll 在开始一个scroll时,再也不接受一个from参数,这个参数在这种状况已经被无视了,如今增长一个错误抛出
    • top hits、inner hits的from/size限制 经过top hits,inner hits容许取回的最大值(from+size)被限制为100,这个限制能够经过index.max_inner_result_window索引设置控制
    • 废弃Scroll queries中的request_cache的使用 设置request_cache:true到一个查询中会建立一个scroll('scroll=1m')如今废弃了,这个请求将不会使用内部缓存在将来版本将会用400代替仅提示忽略。Scroll queries的缓存没有意义
    • 限制Terms Query请求中可使用的terms数量 执行一个有大量terms的Terms Query可能下降集群的性能,每一个附加的term须要额外的处理和内存。为了保护这种状况,一个Terms Query中能用的最大数量限制为65536。能够经过在指定索引中改变索引设定index.max_terms_count来改变默认最大值
  • Settings changes
    • 移除了elasticsearch.json和elasticsearch.yaml配置文件支持 以前会寻找Elasticsearch配置目录下.yml|.yaml|.json拓展名的文件,如今仅支持elasticsearch.yml
    • 配置文件中重复keys 之前容许配置文件中包含重复的keys,在Elasticsearch6.0,再也不容许,必须指定一个single key,如
node:
 name: my-node
 attr:
  rack: my-rack
  • 强制boolean设定 Elasticsearch6.0仅解析truefalse为boolean,其余的会抛出异常,为了向后兼容,在Elasticsearch6.0以前创建的索引仍能工做。注意这不会应用到存储在elasticsearch.yml中的节点级别设定
  • Snapshot settings 内部设定cluster.routing.allocation.snapshot.relocation_enabled容许分片运行从新分配到其余节点被移除的snapshots。启用此设定,在分片分配到其余节点,而后在快照运行时从新分配到此节点可能会引起问题
  • Store throttling settings Store throttling 被移除了,所以集群设定indices.store.throttle.typeindices.store.throttle.max_bytes_per_sec及索引设定index.store.throttle.typeindex.store.throttle.max_bytes_per_sec将再也不解析
  • Store settings 默认的index.store.type被移除了,若是你在使用他,单纯的将他从你的索引设定中移除,Elasticsearch会使用对于你操做系统最好的store实现
  • Network settings 阻塞的TCP客户端,阻塞的TCP服务端以及阻塞的HTTP服务端被移除,所以,network.tcp.blocking_clientnetwork.tcp.blockingtransport.tcp.blocking_clienttransport.tcp.blocking_serverhttp.tcp.blocking_server设定将再也不解析,以前未使用的设定transport.netty.max_cumulation_buffer_capacitytransport.netty.max_composite_buffer_componentshttp.netty.max_cumulation_buffer_capacity被移除了
  • Similarity settings base类似如今做为调整被忽略,query normalization如今被移除,若是提供了,会忽略设定并给出一个废弃警告
  • Script Settings 全部现有的脚本安全性设定被移除了,使用script.allowed_typesscript.allowed_contexts来代替
  • Discovery Settings discovery.type再也不支持gce|aws|ec2值,这些平台的集成应该经过设置discovery.zen.hosts_provider为他们的值
  • Stats and info changes
    • 移除了store stats中的throttle_time 因为存储阈值被移除了,store stats将再也不报告throttle_time
    • FS stats将再也不报告磁盘是否旋转 从2.x开始,Elasticsearch默认会判断是否在SSDs上运行,如上,Elasticsearch再也不须要从文件系统收集是否每一个数据路径的基本磁盘是否旋转。他在ES2.x开始再也不须要,用来维护节点状态API中文件系统分区。这个信息如今移除了
  • 6.1
    • 引导检测应用到本地链接地址 以前,当Elasticsearch bind到localhost时,会bind到回路设备的全部地址,包括 link-local addresses 如macOS上的 fe80::1%lo0。从6.1.2开始,Elasticsearch将仅bind到回路设备的回路地址。因此如今,当Elasticsearch没有bind到localhost时,引导检测会应用于link-local addresses
  • 6.2
    • 全部权限的引导检测 Elasticsearch安装了一个安全管理器,来减小漏洞的范围,对JDK、第三方依赖、Elasticsearch自己提供像不被信任的插件同样的沙盒环境。自定义的安全策略和单个权限能够添加到策略java.security.AllPermission。可是,这实际上至关于禁用了安全管理器。所以,在生产模式下如今经过all permission bootstrap check 禁止受权
    • 私有临时目录 在Linux,以前的版本进程使用默认临时目录/tmp,然而/tmp时公开的,因此Elasticsearch选择改变packaging使用一个私有临时目录。若是是从以前的版本升级的,而且保持了以前存在的jvm.options,应该添加一行-Djava.io.tmpdir=${ES_TMPDIR}指定临时目录,在全部的操做系统上这样操做都是安全的
    • GC日志 从Elasticsearch6.2.0开始,JVM GC日志是开箱即用的。这种轻量级的设备能够了解GC问题。这些设定在jvm.options中,(默认64M轮替,最多32个,约2G)保存到默认日志目录。若是从以前的版本更新,而且保留原有的jvm.options,应该添加GC日志设定来获取有价值的调试信息。若是是使用packaging distributions,使用默认的日志位置为/var/log/elasticsearch,从tarball安装默认使用logs/gc.log,不然,在日志文件中设定绝对路径
    • Rollover alias 在Elasticsearch6.2.0或以后,若是在匹配索引模板时找到一样的别名,rollover请求将被停止。这个变化是为了在rollover期间保护指向多索引的别名。若是你的索引模板已经包含了一样的别名,你应该经过更新索引模板移除他
相关文章
相关标签/搜索