Elasticsearch搜索信息,從低版本2.4.6升級到高版本6.0.0遇到的問題


問題描述 :

                項目最初,es應用的不是那么深入,用到es的地方也相對較少,便直接在官網上下載了2.4.6版本的es作為項目中檢索信息來使用了;  但是隨着,業務不停的變更,以及產品人員需求的多變性. 升級es已經到了必須進行的事情了,就產生了以下內容.

               產品人員要求 將測試環境上數據導入到生產環境上; 當然所有的數據庫中數據也都需要同步到生產,這樣就需要將es做跨集群的數據傳輸和同步;

解決方法 :

     1,升級es到高版本;2,將測試數據copy到高版本的index庫中;3,暴露對外訪問的接口,將測試環境高版本的索引信息同步到外網的生產環境中;

                通過查詢es官方網站的api信息,_reindex命令可以將信息進行傳輸和copy具體的命令如下

// post 請求在Postman工具中即可執行
192.168.xxxx.xxx:9200/_reindex { "source": { "index": "xxxx", "size": 1000 }, "dest": { "index": "yyyy" } }

tips:

  source:是數據來源哪里; index:為你的索引index名稱; size: 不是必填項,當然規定后也可以,以及結合查詢結果進行redix;

  dest: 目的地的意思; index:為索引index名稱; 

這樣同一個es中的不同index就可以進行數據同步了;

那么集群間又應該如何同步呢?生產環境和測試環境的es本身沒有在同一台機器上;

這時就需要remote參數遠程進行同步,而remote這個參數是在es5.0版本以后新加入的功能,所以必須升級es信息;

192.168.x.x:9200/_reindex
{
  "source": {
    "remote": {
      "host": "http://192.168.xx.xx:9200"
    },
    "index": "xxxx"
  },
  "dest": {
    "index": "xxxx"
  }
}

tips :

       remote : 遠程路由地址;使用這個參數前提需要在es的配置文件中 elasticsearch.yml中添加 ip為數據來源的白名單;

    host:是在配置需要訪問的白名單信息,http信息不能缺少;

      白名單具體的配置格式為:reindex.remote.whitelist:["192.168.xx.xx:9200"] 可以填多個ip;

再這里簡單的列舉一下低版本和高版本es在java應用中的區別歡迎指正

esclient使用上:

2.4低版本時,在java中獲取es客戶端時使用的是 TransportClient來獲取客戶端連接的;

6.0.0高版本時,使用 PreBuiltTransportClient 獲取客戶端連接;

插入到索引庫時:

低版本es: prepareIndex()方法接收的json類型的數據;

高版本es:  prepareIndex()方法接收的map類型的數據;

返回結果:

低版本es: hit.getSource()方法只有返回一種對象類型數據;

高版本es: 提供了 getSourceAsString() 和 getSourceAsMap 兩種格式的返回結果;

檢索查詢排序時:

低版本es: 可以對string類型的字段進行排序;

高版本es: 可以對string類型進行排序,但是需要進行處理,並且排序結果並不理想;

社區中給出的解釋是這樣的:

遇到這個錯誤是因為你嘗試對一個text類型的字段做排序,而text類型的字段是要分詞的。 一來詞典很大,性能會很差;二來排序結果是詞典里的詞,而並非整個text的內容。 出於這2點原因,ES5.x以后對於text類型默認禁用了fielddata,防止對text字段一些錯誤的操作(排序,聚合,script)而給heap造成很大的壓力

我們可以用region.keyword進行聚合,排序。具體如下描述

https://elasticsearch.cn/question/4960

tips: 在使用時,還需要注意的一點是,項目應用中的客戶端版本需要和服務器中安裝的版本一致;

客戶端必須與集群中的節點具有相同的主版本(例如2.x或5.x)。客戶端可以連接到具有不同次要版本(例如2.3.x)的集群,但可能不支持新功能。理想情況下,客戶端應該具有與集群相同的版本。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM