elasticsearch2.2之javaApi
生活随笔
收集整理的這篇文章主要介紹了
elasticsearch2.2之javaApi
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
2019獨角獸企業(yè)重金招聘Python工程師標準>>>
前言:elasticsearch雖然自帶rest接口,但是在真正使用過程中可能更多的是通過不同編程語言的客戶端進行交互。
因為代碼里有或多或少的注釋,所以直接貼代碼:
package elasticsearcha;import com.alibaba.fastjson.JSON; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import entity.User; 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.IndexResponse; import org.elasticsearch.action.search.MultiSearchResponse; import org.elasticsearch.action.search.SearchRequestBuilder; import org.elasticsearch.action.search.SearchResponse; import org.elasticsearch.action.search.SearchType; import org.elasticsearch.action.update.UpdateResponse; import org.elasticsearch.client.Client; import org.elasticsearch.client.transport.TransportClient; import org.elasticsearch.common.transport.InetSocketTransportAddress; import org.elasticsearch.index.query.QueryBuilders; import org.elasticsearch.search.SearchHit; import org.junit.Test; import java.net.InetAddress; import java.util.Date; import java.util.HashMap; import java.util.Iterator; import java.util.Map;import static org.elasticsearch.common.xcontent.XContentFactory.jsonBuilder;/*** Created by wangnian on 2016/5/29.*/ public class EsTest {Client client = getClient("192.168.1.55");//創(chuàng)建客戶端public Client getClient(String host) {try {Client client = TransportClient.builder().build().addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(host), 9300));return client;} catch (Exception ex) {System.out.println(ex);}return null;}/*** 將對象通過jackson.databind轉(zhuǎn)換成byte[]* 注意一下date類型需要格式化處理 默認是 時間戳** @return*/public byte[] convertByteArray(Object obj) {ObjectMapper mapper = new ObjectMapper(); // create once, reusetry {byte[] json = mapper.writeValueAsBytes(obj);return json;} catch (JsonProcessingException e) {e.printStackTrace();}return null;}/*** 將對象通過JSONtoString轉(zhuǎn)換成JSON字符串* 使用fastjson 格式化注解 在屬性上加入 @JSONField(format="yyyy-MM-dd HH:mm:ss")** @return*/public String jsonStr(Object obj) {return JSON.toJSONString(obj);}/*** 增刪改查** @throws Exception*/@Testpublic void test() throws Exception {Map<String, Object> json = new HashMap<String, Object>();json.put("name", "wangnian11");json.put("postDate", new Date());json.put("message", "trying out Elasticsearch");User user = new User();user.setId(2);user.setName("更新第一條");user.setPostDate(new Date());user.setMessage("這是一個測試的數(shù)據(jù)");IndexResponse response = client.prepareIndex("index", "user", user.getId().toString())//參數(shù)說明: 索引,類型 ,_id.setSource(jsonStr(user))//setSource可以傳以上map string byte[] 幾種方式.get();boolean created = response.isCreated();System.out.println("創(chuàng)建一條記錄:" + created);//刪除_id為1的類型DeleteResponse response2 = client.prepareDelete("index", "user", "2").get();System.out.println("刪除一條數(shù)據(jù):" + response2.isFound());//更新UpdateResponse updateResponse = client.prepareUpdate("index", "user", "1").setDoc(jsonBuilder().startObject().field("name", "王念").endObject()).get();System.out.println("更新一條數(shù)據(jù):" + updateResponse.isCreated());//獲取_id為1的類型GetResponse response1 = client.prepareGet("index", "user", "1").get();response1.getSourceAsMap();//獲取值轉(zhuǎn)換成mapSystem.out.println("查詢一條數(shù)據(jù):" + JSON.toJSON(response1.getSourceAsMap()));}@Testpublic void test2() {//查詢多個id的值MultiGetResponse multiGetItemResponses = client.prepareMultiGet().add("index", "user", "1").add("index", "user", "2", "3", "4").get();for (MultiGetItemResponse itemResponse : multiGetItemResponses) {GetResponse response = itemResponse.getResponse();if (response.isExists()) {String json = response.getSourceAsString();System.out.println(json);}}//搜索SearchResponse response = client.prepareSearch("index")//可以同時搜索多個索引prepareSearch("index","index2").setTypes("user")//可以同時搜索多個類型.setSearchType(SearchType.DFS_QUERY_THEN_FETCH).setQuery(QueryBuilders.termQuery("name", "張三")) // Query.setPostFilter(QueryBuilders.rangeQuery("age").from(12).to(18)) // Filter.setFrom(0).setSize(2).setExplain(true).execute().actionGet();forSearchResponse(response);System.out.println("總共查詢到有:" + response.getHits().getTotalHits());//多查詢結(jié)果SearchRequestBuilder srb1 = client.prepareSearch().setQuery(QueryBuilders.queryStringQuery("張三")).setSize(1);SearchRequestBuilder srb2 = client.prepareSearch().setQuery(QueryBuilders.matchQuery("name", "張三")).setSize(1);MultiSearchResponse sr = client.prepareMultiSearch().add(srb1).add(srb2).execute().actionGet();long nbHits = 0;for (MultiSearchResponse.Item item : sr.getResponses()) {SearchResponse response1 = item.getResponse();forSearchResponse(response1);nbHits += response1.getHits().getTotalHits();}System.out.println("多查詢總共查詢到有:" + nbHits);}public void forSearchResponse(SearchResponse response) {for (SearchHit hit1 : response.getHits()) {Map<String, Object> source1 = hit1.getSource();if (!source1.isEmpty()) {for (Iterator<Map.Entry<String, Object>> it = source1.entrySet().iterator(); it.hasNext(); ) {Map.Entry<String, Object> entry = it.next();System.out.println(entry.getKey() + "=======" + entry.getValue());}}}} }博客地址:http://my.oschina.net/wangnian
轉(zhuǎn)載于:https://my.oschina.net/wangnian/blog/684686
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的elasticsearch2.2之javaApi的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 段落排版--行间距, 行高(line-h
- 下一篇: bootstrap模态框