1. 程式人生 > >elasticsearch基本操作之--使用java操作elasticsearch

elasticsearch基本操作之--使用java操作elasticsearch

複製程式碼
package com.wenbronk.javaes;

import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;

import org.elasticsearch.action.bulk.BackoffPolicy;
import org.elasticsearch.action.bulk.BulkProcessor;
import org.elasticsearch.action.bulk.BulkProcessor.Listener;
import org.elasticsearch.action.bulk.BulkRequest;
import org.elasticsearch.action.bulk.BulkRequestBuilder;
import org.elasticsearch.action.bulk.BulkResponse;
import org.elasticsearch.action.delete.DeleteRequest;
import org.elasticsearch.action.delete.DeleteResponse;
import org.elasticsearch.action.
get.GetResponse; import org.elasticsearch.action.get.MultiGetItemResponse; import org.elasticsearch.action.get.MultiGetResponse; import org.elasticsearch.action.index.IndexRequest; import org.elasticsearch.action.index.IndexResponse; import org.elasticsearch.action.update.UpdateRequest; import org.elasticsearch.action.update.UpdateResponse; import org.elasticsearch.client.transport.TransportClient; import org.elasticsearch.cluster.node.DiscoveryNode; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.transport.InetSocketTransportAddress; import org.elasticsearch.common.unit.ByteSizeUnit; import org.elasticsearch.common.unit.ByteSizeValue; import org.elasticsearch.common.unit.TimeValue; import org.elasticsearch.common.xcontent.XContentBuilder; import org.elasticsearch.common.xcontent.XContentFactory; import org.elasticsearch.script.Script; import org.junit.Before; import org.junit.Test; import com.alibaba.fastjson.JSONObject;
/** * 使用java API操作elasticSearch * * @author 231 * */ public class JavaESTest { private TransportClient client; private IndexRequest source; /** * 獲取連線, 第一種方式 * @throws Exception */ // @Before public void before() throws Exception { Map<String, String> map = new
HashMap<String, String>(); map.put("cluster.name", "elasticsearch_wenbronk"); Settings.Builder settings = Settings.builder().put(map); client = TransportClient.builder().settings(settings).build() .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("www.wenbronk.com"), Integer.parseInt("9300"))); } /** * 檢視叢集資訊 */ @Test public void testInfo() { List<DiscoveryNode> nodes = client.connectedNodes(); for (DiscoveryNode node : nodes) { System.out.println(node.getHostAddress()); } } /** * 組織json串, 方式1,直接拼接 */ public String createJson1() { String json = "{" + "\"user\":\"kimchy\"," + "\"postDate\":\"2013-01-30\"," + "\"message\":\"trying out Elasticsearch\"" + "}"; return json; } /** * 使用map建立json */ public Map<String, Object> createJson2() { Map<String,Object> json = new HashMap<String, Object>(); json.put("user", "kimchy"); json.put("postDate", new Date()); json.put("message", "trying out elasticsearch"); return json; } /** * 使用fastjson建立 */ public JSONObject createJson3() { JSONObject json = new JSONObject(); json.put("user", "kimchy"); json.put("postDate", new Date()); json.put("message", "trying out elasticsearch"); return json; } /** * 使用es的幫助類 */ public XContentBuilder createJson4() throws Exception { // 建立json物件, 其中一個建立json的方式 XContentBuilder source = XContentFactory.jsonBuilder() .startObject() .field("user", "kimchy") .field("postDate", new Date()) .field("message", "trying to out ElasticSearch") .endObject(); return source; } /** * 存入索引中 * @throws Exception */ @Test public void test1() throws Exception { XContentBuilder source = createJson4(); // 存json入索引中 IndexResponse response = client.prepareIndex("twitter", "tweet", "1").setSource(source).get(); // // 結果獲取 String index = response.getIndex(); String type = response.getType(); String id = response.getId(); long version = response.getVersion(); boolean created = response.isCreated(); System.out.println(index + " : " + type + ": " + id + ": " + version + ": " + created); } /** * get API 獲取指定文件資訊 */ @Test public void testGet() { // GetResponse response = client.prepareGet("twitter", "tweet", "1") // .get(); GetResponse response = client.prepareGet("twitter", "tweet", "1") .setOperationThreaded(false) // 執行緒安全 .get(); System.out.println(response.getSourceAsString()); } /** * 測試 delete api */ @Test public void testDelete() { DeleteResponse response = client.prepareDelete("twitter", "tweet", "1") .get(); String index = response.getIndex(); String type = response.getType(); String id = response.getId(); long version = response.getVersion(); System.out.println(index + " : " + type + ": " + id + ": " + version); } /** * 測試更新 update API * 使用 updateRequest 物件 * @throws Exception */ @Test public void testUpdate() throws Exception { UpdateRequest updateRequest = new UpdateRequest(); updateRequest.index("twitter"); updateRequest.type("tweet"); updateRequest.id("1"); updateRequest.doc(XContentFactory.jsonBuilder() .startObject() // 對沒有的欄位新增, 對已有的欄位替換 .field("gender", "male") .field("message", "hello") .endObject()); UpdateResponse response = client.update(updateRequest).get(); // 列印 String index = response.getIndex(); String type = response.getType(); String id = response.getId(); long version = response.getVersion(); System.out.println(index + " : " + type + ": " + id + ": " + version); } /** * 測試update api, 使用client * @throws Exception */ @Test public void testUpdate2() throws Exception { // 使用Script物件進行更新 // UpdateResponse response = client.prepareUpdate("twitter", "tweet", "1") // .setScript(new Script("hits._source.gender = \"male\"")) // .get(); // 使用XContFactory.jsonBuilder() 進行更新 // UpdateResponse response = client.prepareUpdate("twitter", "tweet", "1") // .setDoc(XContentFactory.jsonBuilder() // .startObject() // .field("gender", "malelelele") // .endObject()).get(); // 使用updateRequest物件及script // UpdateRequest updateRequest = new UpdateRequest("twitter", "tweet", "1") // .script(new Script("ctx._source.gender=\"male\"")); // UpdateResponse response = client.update(updateRequest).get(); // 使用updateRequest物件及documents進行更新 UpdateResponse response = client.update(new UpdateRequest("twitter", "tweet", "1") .doc(XContentFactory.jsonBuilder() .startObject() .field("gender", "male") .endObject() )).get(); System.out.println(response.getIndex()); } /** * 測試update * 使用updateRequest * @throws Exception * @throws InterruptedException */ @Test public void testUpdate3() throws InterruptedException, Exception { UpdateRequest updateRequest = new UpdateRequest("twitter", "tweet", "1") .script(new Script("ctx._source.gender=\"male\"")); UpdateResponse response = client.update(updateRequest).get(); } /** * 測試upsert方法 * @throws Exception * */ @Test public void testUpsert() throws Exception { // 設定查詢條件, 查詢不到則新增生效 IndexRequest indexRequest = new IndexRequest("twitter", "tweet", "2") .source(XContentFactory.jsonBuilder() .startObject() .field("name", "214") .field("gender", "gfrerq") .endObject()); // 設定更新, 查詢到更新下面的設定 UpdateRequest upsert = new UpdateRequest("twitter", "tweet", "2") .doc(XContentFactory.jsonBuilder() .startObject() .field("user", "wenbronk") .endObject()) .upsert(indexRequest); client.update(upsert).get(); } /** * 測試multi get api * 從不同的index, type, 和id中獲取 */ @Test public void testMultiGet() { MultiGetResponse multiGetResponse = client.prepareMultiGet() .add("twitter", "tweet", "1") .add("twitter", "tweet", "2", "3", "4") .add("anothoer", "type", "foo") .get(); for (MultiGetItemResponse itemResponse : multiGetResponse) { GetResponse response = itemResponse.getResponse(); if (response.isExists()) { String sourceAsString = response.getSourceAsString(); System.out.println(sourceAsString); } } } /** * bulk 批量執行 * 一次查詢可以update 或 delete多個document */ @Test public void testBulk() throws Exception { BulkRequestBuilder bulkRequest = client.prepareBulk(); bulkRequest.add(client.prepareIndex("twitter", "tweet", "1") .setSource(XContentFactory.jsonBuilder() .startObject() .field("user", "kimchy") .field("postDate", new Date()) .field("message", "trying out Elasticsearch") .endObject())); bulkRequest.add(client.prepareIndex("twitter", "tweet", "2") .setSource(XContentFactory.jsonBuilder() .startObject() .field("user", "kimchy") .field("postDate", new Date()) .field("message", "another post") .endObject())); BulkResponse response = bulkRequest.get(); System.out.println(response.getHeaders()); } /** * 使用bulk processor * @throws Exception */ @Test public void testBulkProcessor() throws Exception { // 建立BulkPorcessor物件 BulkProcessor bulkProcessor = BulkProcessor.builder(client, new Listener() { public void beforeBulk(long paramLong, BulkRequest paramBulkRequest) { // TODO Auto-generated method stub } // 執行出錯時執行 public void afterBulk(long paramLong, BulkRequest paramBulkRequest, Throwable paramThrowable) { // TODO Auto-generated method stub } public void afterBulk(long paramLong, BulkRequest paramBulkRequest, BulkResponse paramBulkResponse) { // TODO Auto-generated method stub } }) // 1w次請求執行一次bulk .setBulkActions(10000) // 1gb的資料重新整理一次bulk .setBulkSize(new ByteSizeValue(1, ByteSizeUnit.GB)) // 固定5s必須重新整理一次 .setFlushInterval(TimeValue.timeValueSeconds(5)) // 併發請求數量, 0不併發, 1併發允許執行 .setConcurrentRequests(1) // 設定退避, 100ms後執行, 最大請求3次 .setBackoffPolicy( BackoffPolicy.exponentialBackoff(TimeValue.timeValueMillis(100), 3)) .build(); // 新增單次請求 bulkProcessor.add(new IndexRequest("twitter", "tweet", "1")); bulkProcessor.add(new DeleteRequest("twitter", "tweet", "2")); // 關閉 bulkProcessor.awaitClose(10, TimeUnit.MINUTES); // 或者 bulkProcessor.close(); } }
複製程式碼

相關推薦

Elasticsearch筆記五java操作es

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

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

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

Elasticsearch學習Java操作1

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

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

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

elasticsearch基本索引和CRUD操作、bulk批量操作

ELK包括ElasticSearch(資料儲存、快速查詢)、logstash(日誌蒐集)、kibana(展示ElasticSearch資料的圖形介面)。 4種常用的HTTP請求方法: POST /uri 建立 DELETE /uri/xxx 刪除 P

elasticsearch 5.5.0 java操作(新增索引、分頁搜尋)

網上資源比較亂、比較雜,稍微總結一下,幫助大家避免像我一樣走彎路………… ———————————————————————————————————— 首先引入maven依賴: <!--elasticsearch--> <dependency

Linux基本命令操作

sha strong linux基本命令 lang 出現 linu color 主機名 ado 查看網卡信息 /:在vi/vim裏表示搜索的意思 3.LANG=en(修改出現亂碼的情況)4.5.修改主機名6.7.清除歷史命令:8.清除指定的命令:Linux特殊變量:

mongodb基本命令和Java操作API示例

1.Mongo3.2 java API示例:http://www.cnblogs.com/zhangchaoyang/articles/5146508.html2.MongoDB基本命:http://www.cnblogs.com/xusir/archive/2012/12/

HiveJava操作jdbc以及指令碼實現

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

Kafka筆記三java操作

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

ESJAVA操作

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

Linux基本命令檔案操作命令

目錄管理:ls ,cd, pwd,madir,rmdir,tree檔案管理:touch,stat,file,rm,cp,mv,nano,vi,vim日期時間:date,clock,hwclock,cal,ntpdate檢視文字:cat,tac,more,less,head,t

linux的基本命令目錄操作命令

一、目錄的切換命令 cd usr 切換到該目錄下usr目錄 cd ../ 切換到上一層目錄 cd / 切換到系統根目錄 cd ~ 切換到使用者主目錄 cd - 切換到上一個所在目錄 二、

python selenium 元素操作鍵盤操作(五)

兩個 .com multi 模擬 刪除 del escape comm f11 上節介紹了模擬鼠標對元素的操作,本節主要介紹鍵盤對元素的操作,實際過程中鼠標對元素的操作比鍵盤對元素的操作更經常使用,但是鍵盤對元素的操作也很重要,本節主要介紹一下鍵盤對元素的操作。 selen

DOM操作CSS操作

規則 相關 dom操作 get ron insert selector lin 對象 操作行內樣式   寫法:元素節點.style     得到該元素節點的CSS樣式聲明對象;CSSStyleDeclaration     元素節點.style.樣式名

Git常用操作刪除操作

delete stat chan update 常用 del 進入 code res Git刪除操作有兩種 1.git rm 2.rm 有何不同? git rm直接包含了add操作。show you the code bocur@DESKTOP-PTRIQEA /d/p

python selenium-webdriver 元素操作鍵盤操作

height decimal page 常用 trac max keys span web selenium 提供了比較完整的鍵盤操作,在使用的模擬鍵盤操作之前需要我們導入from selenium.webdriver.common.keys import Keys即可,然

Redis學習---Redis操作其他操作

clas script rand wid com b- brush exists delete 全局有效的其他操作save 強制將內存/緩存中的key刷到硬盤上 -------------------------------------------------------

jQuery文檔操作插入操作

query () string inner str create 示例 ebe addclass append() 語法 父元素.append(子元素) 解釋:追加某元素,在父元素中添加新的子元素。子元素可以為:string/element(js對象)/jQuery元素

jQuery文檔操作修改操作

dom all () 指定 lec eal 標簽 pla replace replaceWith() 語法: $(selector).replaceWith(content); 將所有匹配的元素替換成指定的string、js對象、jQuery對象。 // 將所有的h5標