上篇文章散仙介紹了ElasticSearch的入門安裝和使用,那麼本篇咱們來看下,如何使用java api來和ElasticSearch進行交互,簡單點說,就是實現一個增刪改查,來找找入門的感受。
在這裏散仙解釋一下,爲啥選擇使用Java api來做爲一個入門的例子,主要緣由以下:
(1)Java在大中小型企業級應用很是普遍,並且ES自己就是包裝了使用java編寫的Apache Lucene。
(2)基於java的api能和其餘不少基於hadoop生態系統的開源框架對接,如Hbase,Hive,Pig等。
(3)學習資料比較豐富,下降了入門門檻。
固然散仙在這裏並非來誇讚JAVA如何牛逼,而是以一個方便於你們快速學習和入門着想的,ES的最大特色就是提供了一個輕量級的RESTful的接口來對接各類編程語言,你可使用python,php,JavaScript,ruby,C#等等任何語言來對ES進行操做和管理,甚至你也可使用shell+curl來搞定這件事情。
本篇,散仙給出一個最簡單的使用java api操做ES的小例子,後面文章,散仙會繼續分享關於ES更多的文章,在這以前,仍是想請你們注意ES的服務在啓動以後,會提供2個端口來供外部使用,一個是9300基於給java程序使用的端口,另外一個是9200供其餘編程語言調用,以及等一些插件的訪問也會使用此端口,在編寫程序時,切記不能寫錯。
php
package com.test; python
import java.util.Date; shell
import java.util.HashMap; 編程
import java.util.Map; json
import java.util.Map.Entry; api
import org.elasticsearch.action.delete.DeleteResponse; ruby
import org.elasticsearch.action.get.GetResponse; 微信
import org.elasticsearch.action.index.IndexResponse; 框架
import org.elasticsearch.action.update.UpdateRequest;
import org.elasticsearch.client.Client;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.index.get.GetField;
import com.google.gson.Gson;
/**
* 使用java api 操做elasticsearch索引,包含了基本的增刪改查
* @author qindongliang
* 歡迎你們加入下面的技術交流羣(廣告勿入),一塊兒探討交流,
* 另外也可關注咱們的公衆號:我是攻城師(woshigcs)
* 搜索技術交流羣:324714439
* 大數據技術交流羣:376932160
* **/
public class ESCommon {
//es的客戶端實例
Client client=null;
{
//鏈接單臺機器,注意ip和端口號,不能寫錯
client=new TransportClient().
addTransportAddress(new InetSocketTransportAddress("192.168.46.23", 9300));
}
public static void main(String[] args)throws Exception {
ESCommon es=new ESCommon();
//es.updatedoc();
//es.getone();
//es.deleteOne();
es.indexOne();
}
/**
* delete one data
*
* **/
public void deleteOne(){
try{
DeleteResponse de=client.prepareDelete("database", "table", "2").execute().actionGet();
if(!de.isFound()){
System.out.println("詞條數據不存在!");
}
System.out.println("刪除成功!");
}catch(Exception e){
e.printStackTrace();
}
}
/**
* index one data
* **/
public void updatedoc()throws Exception{
UpdateRequest ur=new UpdateRequest();
ur.index("database");
ur.type("table");
ur.id("1");
Map<String, Object> data = new HashMap<String, Object>();
data.put("user","更新的用戶");
data.put("message","我也要更新了呀");
ur.doc(data);
client.update(ur);
System.out.println("更新成功!");
}
/**
* get one data
* **/
public void getone()throws Exception{
GetResponse response = client.prepareGet("database", "table", "22")
.execute()
.actionGet();
if(!response.isExists()){
System.out.println("數據不存在! ");
return;
}
Map<String, Object> source = response.getSource();
for(Entry<String, Object> eo:source.entrySet()){
System.out.println(eo.getKey()+" "+eo.getValue());
}
Map<String, GetField> fields = response.getFields();
if(fields!=null){
for(Entry<String, GetField> s:fields.entrySet()){
System.out.println(s.getKey());
}
}else{
System.out.println("fields is null;");
}
client.close();
}
/**
* index one data
*
* **/
public void indexOne()throws Exception{
Map<String, Object> data = new HashMap<String, Object>();
data.put("user","kimchy");
data.put("postDate",new Date());
data.put("message","trying out Elasticsearch");
Gson g=new Gson();
String json=g.toJson(data);
//獲得一個json串
IndexResponse ir=client.prepareIndex("database", "table", "23").setSource(json).execute().actionGet() ;
String index_name=ir.getIndex();
String index_type=ir.getType();
String docid=ir.getId();
long version=ir.getVersion();
System.out.println("索引名: "+index_name+" ");
System.out.println("索引類型: "+index_type+" ");
System.out.println("docid: "+docid+" ");
System.out.println("版本號: "+version+" ");
client.close();
System.out.println("鏈接成功!");
}
}
好了,本篇入門小例子,就到此結束了
想了解更多有關電商互聯網公司的搜索技術和大數據技術的使用,請歡迎掃碼關注微信公衆號:我是攻城師(woshigcs)
本公衆號的內容是有關搜索和大數據技術和互聯網等方面內容的分享,也是一個舒適的技術互動交流的小家園,有什麼問題隨時均可以留言,歡迎你們來訪!