Elasticsearch提供兩個內置的client給JAVA API進行數據交互使用:node
本篇利用 Transport client 方式進行數據交互,端口爲9300(9200端口是基於RESTful方式的)。 使用elasticsearch提供的Java API,利用Client對象對elasticsearch執行操做 ,全部操做在本質上是徹底異步的。數據庫
Eclipse建立Maven Project,並在pom.xml中引入ES的maven包:json
2.建立 Transport client 連接到集羣數組
Setting對象用來告訴Transport Client要連接到哪一個集羣和節點,cluster.name是集羣名稱,node.name是節點名稱,這兩個屬性值必須與%ES_HOME%/config下elasticsearch.yml文件設置一致。 若是鏈接到一個 Elasticsearch 集羣,構建器能夠接受多個地址。(在本例中只有一個 localhost 節點。)dom
Transport Client 有一個集羣嗅探功能,當client.transport.sniff設置爲ture時容許它動態地添加新的主機和刪除舊的。經過調用addTransportAddress構建, 鏈接到node節點的node list中, 。在這以後,客戶機將調用內部集羣狀態API在這些節點發現可用的數據節點上。客戶端將被替換的內部節點列表中與數據節點。這個列表默認每5秒刷新。注意,IP地址爲node節點在elasticsearch的發佈地址配置。異步
其餘設置:elasticsearch
client.transport.ignore_cluster_name:
當設置爲true時,忽略集羣名稱驗證
。maven
client.transport.ping_timeout
: 超時,默認爲5s.性能
client.transport.nodes_sampler_interval
:多長時間鏈接node list,默認5s.ui
3.索引的CRUD操做
要求JSON格式的文檔,方式多樣,推薦使用ES內置的 XContentFactory.jsonBuilder() 方法生成。
添加索引的代碼:
索引名稱(vinux)和類別(employee)是必須的,ID(1)若是不指定則會默認生成一個哈希值的ID。
IndexResponse對象返回數據:
① getIndex():索引名稱。
② getType():類別名稱。
③ getId():生成的文檔ID。
④ getVersion():版本號,若是是第一次建立文檔則返回1。
⑤ isCreated():若是爲true則新建,false爲update。
也可使用UUID.randomUUID()來生成一個ID:
經過GetResponse.getSourceAsString()方法返回一個JSON數據:
代碼
①第一種方式:經過建立UpdateRequest對象,而後將其發送到客戶端進行修改。
結果:
②第二種方式:利用prepareUpdate()方法。
注意:紅框中的setDoc()方法,而不是setSource()方法。還有一個方式是利用setScript()方法生成文檔。
在UpdateRequest對象中使用script方法:
③第三種方式:使用upsert()方法,若是索引存在就修改,沒有就add。
結果:
而後返回SearchHit數組:
結果也是返回SearchHit數組 :
要注意的第一個有趣的 API 用法是 QueryBuilders.matchQuery("name", Lilei);。這是您設置對 name 字段的查詢的地方。另外要注意的是 QueryBuilders.andQuery("age", "100"),它是將查詢的 name 和 age 部分合併到 AND 查詢中的一種方法。 andQuery ()方法現已被fuzzyQuery()替代。
結果:
search請求只是返回一個單一的結果頁面,而scroll能夠用來檢索大量的結果,就像數據庫中的遊標cursor。 好比你一次請求的數據會很大,可使用scroll這樣的流式接口,scroll會把你的所須要的結果標記起來,同時還會對數據進行排序,可是這樣會影響性能。
經過getCount()方法返回總數。
OK ,以上就是ES關於JAVA API 的相關操做。
esdemo下載:http://pan.baidu.com/s/1cqRwF8。