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期間保護指向多索引的別名。若是你的索引模板已經包含了一樣的別名,你應該經過更新索引模板移除他
相關文章
相關標籤/搜索