1. 程式人生 > >Elasticsearch筆記五之java操作es

Elasticsearch筆記五之java操作es

Java操作es叢集步驟1:配置叢集物件資訊;2:建立客戶端;3:檢視叢集資訊

1:叢集名稱

      預設叢集名為elasticsearch,如果叢集名稱和指定的不一致則在使用節點資源時會報錯。

2:嗅探功能

       通過client.transport.sniff啟動嗅探功能,這樣只需要指定叢集中的某一個節點(不一定是主節點),然後會載入叢集中的其他節點,這樣只要程式不停即使此節點宕機仍然可以連線到其他節點。

3:查詢型別SearchType.QUERY_THEN_FETCH

      Es中一共有四種查詢型別。

      QUERY_AND_FETCH:

      主節點將查詢請求分發到所有的分片中,各個分片按照自己的查詢規則即詞頻文件頻率進行打分排序,然後將結果返回給主節點,主節點對所有資料進行彙總排序然後再返回給客戶端,此種方式只需要和es互動一次。

      這種查詢方式存在資料量和排序問題,主節點會彙總所有分片返回的資料這樣資料量會比較大,二是各個分片上的規則可能不一致。

QUERY_THEN_FETCH:

      主節點將請求分發給所有分片,各個分片打分排序後將資料的id和分值返回給主節點,主節點收到後進行彙總排序再根據排序後的id到對應的節點讀取對應的資料再返回給客戶端,此種方式需要和es互動兩次。

      這種方式解決了資料量問題但是排序問題依然存在而且是es的預設查詢方式。

DFS_QUERY_AND_FETCH和DFS_QUERY_THEN_FETCH:

      這兩種方式和前面兩種的區別在於將各個分片的規則統一起來進行打分。解決了排序問題但是DFS_QUERY_AND_FETCH仍然存在資料量問題,DFS_QUERY_THEN_FETCH兩種噢乖你問題都解決但是效率是最差的。

特點:

     一個互動兩次,一個互動一次;一個統一打分規則一個不統一;一個分片返回詳細資料一個分片返回id。

4:分頁壓力

       我們通過curl和java查詢時都可以指定分頁,但是頁數越往後伺服器的壓力會越大。大多數搜尋引擎都不會提供非常大的頁數搜尋,原因有兩個一是使用者習慣一般不會看頁數大的搜尋結果因為越往後越不準確,二是伺服器壓力。

       比如分片是5分頁單位是10查詢第10000到10010條記錄,es需要在所有分片上進行查詢,每個分片會產生10010條排序後的資料然後返回給主節點,主節點接收5個分片的資料一共是50050條然後再進行彙總最後再取其中的10000到10010條資料返回給客戶端,這樣一來看似只請求了10條資料但實際上es要彙總5萬多條資料,所以頁碼越大伺服器的壓力就越大。

5:超時timeout

       查詢時如果資料量很大,可以指定超時時間即到達此時間後無論查詢的結果是什麼都會返回並且關閉連線,這樣使用者體驗較好缺點是查詢出的資料可能不完整,Java和curl都可以指定超時時間。

6:maven依賴

  1. <dependency>  
  2.             <groupId>org.elasticsearch</groupId>  
  3.             <artifactId>elasticsearch</artifactId>  
  4.             <version>1.4.4</version>  
  5.         </dependency>    
  6.         <dependency>  
  7.             <groupId>com.fasterxml.jackson.core</groupId>  
  8.             <artifactId>jackson-databind</artifactId>  
  9.             <version>2.1.3</version>  
  10.         </dependency>  


以下是java程式碼

  1. package elasticsearch;  
  2. import java.io.IOException;  
  3. import java.util.HashMap;  
  4. import java.util.List;  
  5. import java.util.Map;  
  6. import java.util.concurrent.ExecutionException;  
  7. import online.elasticsearch.bean.Student;  
  8. import org.elasticsearch.ElasticsearchException;  
  9. import org.elasticsearch.action.bulk.BulkItemResponse;  
  10. import org.elasticsearch.action.bulk.BulkRequestBuilder;  
  11. import org.elasticsearch.action.bulk.BulkResponse;  
  12. import org.elasticsearch.action.delete.DeleteRequest;  
  13. import org.elasticsearch.action.delete.DeleteResponse;  
  14. import org.elasticsearch.action.get.GetResponse;  
  15. import org.elasticsearch.action.index.IndexRequest;  
  16. import org.elasticsearch.action.index.IndexResponse;  
  17. import org.elasticsearch.action.search.SearchResponse;  
  18. import org.elasticsearch.action.search.SearchType;  
  19. import org.elasticsearch.action.update.UpdateRequest;  
  20. import org.elasticsearch.action.update.UpdateResponse;  
  21. import org.elasticsearch.client.transport.TransportClient;  
  22. import org.elasticsearch.cluster.node.DiscoveryNode;  
  23. import org.elasticsearch.common.collect.ImmutableList;  
  24. import org.elasticsearch.common.settings.ImmutableSettings;  
  25. import org.elasticsearch.common.settings.Settings;  
  26. import org.elasticsearch.common.text.Text;  
  27. import org.elasticsearch.common.transport.InetSocketTransportAddress;  
  28. import org.elasticsearch.common.transport.TransportAddress;  
  29. import org.elasticsearch.common.xcontent.XContentBuilder;  
  30. import org.elasticsearch.common.xcontent.XContentFactory;  
  31. import org.elasticsearch.index.query.FilterBuilders;  
  32. import org.elasticsearch.index.query.MatchQueryBuilder.Operator;  
  33. import org.elasticsearch.index.query.QueryBuilders;  
  34. import org.elasticsearch.search.SearchHit;  
  35. import org.elasticsearch.search.SearchHits;  
  36. import org.elasticsearch.search.aggregations.Aggregation;  
  37. import org.elasticsearch.search.aggregations.AggregationBuilders;  
  38. import org.elasticsearch.search.aggregations.Aggregations;  
  39. import org.elasticsearch.search.aggregations.bucket.terms.Terms;  
  40. import org.elasticsearch.search.aggregations.bucket.terms.Terms.Bucket;  
  41. import org.elasticsearch.search.aggregations.metrics.sum.Sum;  
  42. import org.elasticsearch.search.highlight.HighlightField;  
  43. import org.elasticsearch.search.sort.SortOrder;  
  44. import org.junit.Before;  
  45. import org.junit.Test;  
  46. import com.fasterxml.jackson.core.JsonProcessingException;  
  47. import com.fasterxml.jackson.databind.ObjectMapper;  
  48. publicclass elastaicTest {  
  49.     TransportClient transportClient;  
  50.     //索引庫名
  51.     String index = "shb01";  
  52.     //型別名稱
  53.     String type = "stu";  
  54.     @Before
  55.     publicvoid before()  
  56.     {  
  57.         /** 
  58.          * 1:通過 setting物件來指定叢集配置資訊 
  59.          */
  60.         Settings setting = ImmutableSettings.settingsBuilder()  
  61.             .put("cluster.name""shb01")//指定叢集名稱
  62.             .put("client.transport.sniff"true)//啟動嗅探功能
  63.             .build();  
  64.         /** 
  65.          * 2:建立客戶端 
  66.          * 通過setting來建立,若不指定則預設連結的叢集名為elasticsearch 
  67.          * 連結使用tcp協議即9300 
  68.          */
  69.         transportClient = new TransportClient(setting);                          
  70.         TransportAddress transportAddress = new InetSocketTransportAddress("192.168.79.131"

    相關推薦

    Elasticsearch筆記java操作es

    Java操作es叢集步驟1:配置叢集物件資訊;2:建立客戶端;3:檢視叢集資訊 1:叢集名稱       預設叢集名為elasticsearch,如果叢集名稱和指定的不一致則在使用節點資源時會報錯。 2:嗅探功能        通過client

    Kafka筆記java操作

    maven依賴,我使用的是版本是0.8.22,scala是2.11 <dependency>    <groupId>org.apache.kafka</groupId>    <artifactId>kafka_2.11&l

    Elasticsearch學習Java操作1

    默認 time field java客戶端 OS should timeval nodes spa 1. Elasticsearch為Java用戶提供了兩種內置客戶端 1.1 節點客戶端(node client): 節點客戶端以無數據節點(none data nod

    elasticsearchjava 使用批量操作bulk及注意事項

    1,BulkRequest物件可以用來在一次請求中,執行多個索引、更新或刪除操作     且允許在一次請求中進行不同的操作,即一次請求中索引、更新、刪除操作可以同時存在 BulkRequest bulkRequest = new BulkRequest(); bulk

    【js操作dom物件學習筆記事件冒泡、location物件、history物件、定時器】

    1.總結addEventListener()和attachEvent()的區別      相同點:都可以為元素繫結事件   不同點:1.方法名不一樣          2.引數的個數不一樣addEventListener三個引數,attachEvent兩個引數        

    ESJAVA操作

    連線Client// 按叢集名稱建立 /** * clusterName需要跟elasticsearch.yml裡的clusterName相同 */ Settings settings = Settings.builder().put("cluster.n

    Elasticsearch筆記優化

    很多 系統 div ons oca eat consola 極速 eth Elasticsearch筆記九之優化優化從索引片段,內存設置,副本,分片,日誌等方面入手。1:索引片段Es運行時會生成很多索引片段,執行查詢時會打開這些索引片斷。系統會限制打開索引片斷的個數一旦超過

    【慕課網實戰】Spark Streaming實時流處理項目實戰筆記銘文升級版

    環境變量 local server 節點數 replicas conn 配置環境 park 所有 銘文一級: 單節點單broker的部署及使用 $KAFKA_HOME/config/server.propertiesbroker.id=0listenershost.name

    JSP學習筆記application和page物件

    這篇部落格將9大物件的剩下的物件部分全部講掉。 E、Application內建物件 Application物件直接包裝了servlet的ServletContext類的物件,是javax.servlet.ServletContext 類的例項。這個物件在JSP頁面的整個生命週

    mysql筆記操作與 表操作

    資料庫使用者名稱: root 密碼:            mysql char(5) 長度固定為5的字串 ab  --> "ab   " varchar(5) abc --> "abc" 不能夠超

    mysql筆記分頁、連線查詢、自關聯、子查詢

    1.-- 分頁     -- limit start, count     -- 表示獲取多少條資料     -- start 預設值為0 可以省略     -- 表示跳過多少

    [基礎篇]ESP8266-NonOS學習筆記(四)GPIO操作(按鍵、LED、中斷、定時器)

      本篇文章我們再回到基礎篇,難道你還以為我會講UDP?啊哈哈哈,UDP肯定是會講的,但是應用場景不是很多,我們放到後面再講,不過也是簡單一講,畢竟熟悉UDP協議的人來說,都知道UDP一種不可靠的傳輸協議,可以這樣形容“我(Client)只管發,你(Server)愛收不收”,所以在一些實際應用場景

    Zookeeper學習筆記監控與通知

    監控與通知 Zookeeper通常以遠端服務的方式被訪問,如果每次訪問znode時,客戶端都需要獲得節點中的內容。這樣的代價就非常大。因為這樣會導致更高的延遲,而且Zookeeper需要做更多的操作,例如下圖中,第二次呼叫getChildren /tasks返回了相同的值,

    多執行緒學習筆記讀寫鎖實現分析

    目錄 簡介 讀寫狀態 讀鎖計數器 共享鎖的獲取 tryAcquireShared(int unused) doAcquireShared(int arg) 共享鎖的釋放 tryReleaseShared(int unus

    Elasticsearch筆記中文分詞器及自定義分詞器

    中文分詞器 在lunix下執行下列命令,可以看到本來應該按照中文”北京大學”來查詢結果es將其分拆為”北”,”京”,”大”,”學”四個漢字,這顯然不符合我的預期。這是因為Es預設的是英文分詞器我需要為其配置中文分詞器。 curlHTTP://192.168.79.131:9

    elasticsearch原始碼分析索引操作(九)

    上節介紹了es的node啟動如何建立叢集服務的過程,這節在其基礎之上介紹es索引的基本操作功能(create、exist、delete),用來進一步細化es叢集是如果工作的。 客戶端部分的操作就不予介紹了,詳細可以參照elasticsearch原始碼分析之客戶

    HiveJava操作jdbc以及指令碼實現

    原部落格地址:http://blog.csdn.net/evankaka     摘要:本文主要講了如何通過java來連線Hive,以及如何執行hive指令碼 一、Hive連線 1.1、通過shell 1、Hive 命令列模式,直接輸入#/hive

    紅黑樹() Java的實現

    1 /** 2 * Java 語言: 紅黑樹 3 * 4 * @author skywang 5 * @date 2013/11/07 6 */ 7 8 public class RBTree<T extends Comparable<

    以CSV檔案匯入MySQL的批量資料插入操作Java操作

    最近工作涉及將excel中的資料匯入到MySQL資料庫,由於Excel中資料並不規範,需要進行二次加工。將excel中資料加工後,通過mybatis批量插入mySQL資料庫,其相關聯的技術點比較簡單,經過半天的編寫,算是把任務完成了。但測試時效能太差,處理2W條資料的exc

    《設計模式禪》讀書筆記()代理模式

    1. 代理模式的定義和應用 1.1 代理模式的定義 Provide a surrogate or placeholder for another object to control access to it .(為其他物件提供一種代理以控制對這個物件的訪