Elasticsearch簡單操作(Java程式碼)
阿新 • • 發佈:2019-02-19
1.首先安裝Elasticsearch,配置相關檔案,並啟動服務
2.建立專案,匯入相關Jar包
3.建立ElasticsearchUtils類,裡面包括初始化操作和建立索引、更新索引、刪除索引、查詢索引
(1)初始化操作,需要傳入叢集名稱和ip地址,叢集名稱本例子使用elasticsearch配置檔案中配置的cluster name,IP地址使用localhost
[java] view plain copy print?- publicclass ElasticsearchUtils {
- private Client client;
- public ElasticsearchUtils(String clusterName, String ipAddress) {
- Settings settings = ImmutableSettings
- .settingsBuilder()
- //設定叢集名稱
- .put(”cluster.name”, clusterName)
- .put(”client.transport.ignore_cluster_name”, false)
- .put(”node.client”, true).put(“client.transport.sniff”, true
- .build();
- client = new TransportClient(settings)
- .addTransportAddress(new InetSocketTransportAddress(ipAddress,
- 9300));//此處埠號為9300
- }
- }
(2)建立索引 [java] view plain copy print?public class ElasticsearchUtils { private Client client; public ElasticsearchUtils(String clusterName, String ipAddress) { Settings settings = ImmutableSettings .settingsBuilder() //設定叢集名稱 .put("cluster.name", clusterName) .put("client.transport.ignore_cluster_name", false) .put("node.client", true).put("client.transport.sniff", true) .build(); client = new TransportClient(settings) .addTransportAddress(new InetSocketTransportAddress(ipAddress, 9300));//此處埠號為9300 } }
- /**
- * 建立索引
- * @param indexName 索引名稱,相當於資料庫名稱
- * @param typeName 索引型別,相當於資料庫中的表名
- * @param id id名稱,相當於每個表中某一行記錄的標識
- * @param jsonData json資料
- */
- publicvoid createIndex(String indexName, String typeName, String id,
- String jsonData) {
- IndexRequestBuilder requestBuilder = client.prepareIndex(indexName,
- typeName, id).setRefresh(true);//設定索引名稱,索引型別,id
- requestBuilder.setSource(jsonData).execute().actionGet();//建立索引
- }
/**
* 建立索引
* @param indexName 索引名稱,相當於資料庫名稱
* @param typeName 索引型別,相當於資料庫中的表名
* @param id id名稱,相當於每個表中某一行記錄的標識
* @param jsonData json資料
*/
public void createIndex(String indexName, String typeName, String id,
String jsonData) {
IndexRequestBuilder requestBuilder = client.prepareIndex(indexName,
typeName, id).setRefresh(true);//設定索引名稱,索引型別,id
requestBuilder.setSource(jsonData).execute().actionGet();//建立索引
}
(3)查詢索引
[java] view plain copy print?- /**
- * 執行搜尋
- * @param indexname 索引名稱
- * @param type 索引型別
- * @param queryBuilder 查詢條件
- * @return
- */
- public SearchResponse searcher(String indexName, String typeName,
- QueryBuilder queryBuilder) {
- SearchResponse searchResponse = client.prepareSearch(indexName)
- .setTypes(typeName).setQuery(queryBuilder).execute()
- .actionGet();//執行查詢
- return searchResponse;
- }
/**
* 執行搜尋
* @param indexname 索引名稱
* @param type 索引型別
* @param queryBuilder 查詢條件
* @return
*/
public SearchResponse searcher(String indexName, String typeName,
QueryBuilder queryBuilder) {
SearchResponse searchResponse = client.prepareSearch(indexName)
.setTypes(typeName).setQuery(queryBuilder).execute()
.actionGet();//執行查詢
return searchResponse;
}
(4)更新索引 [java] view plain copy print?
- /**
- * 更新索引
- * @param indexName 索引名稱
- * @param typeName 索引型別
- * @param id id名稱
- * @param jsonData json資料
- */
- publicvoid updateIndex(String indexName, String typeName, String id,
- String jsonData) {
- UpdateRequest updateRequest = new UpdateRequest();
- updateRequest.index(indexName);//設定索引名稱
- updateRequest.id(id);//設定id
- updateRequest.type(typeName);//設定索引型別
- updateRequest.doc(jsonData);//更新資料
- client.update(updateRequest).actionGet();//執行更新
- }
/**
* 更新索引
* @param indexName 索引名稱
* @param typeName 索引型別
* @param id id名稱
* @param jsonData json資料
*/
public void updateIndex(String indexName, String typeName, String id,
String jsonData) {
UpdateRequest updateRequest = new UpdateRequest();
updateRequest.index(indexName);//設定索引名稱
updateRequest.id(id);//設定id
updateRequest.type(typeName);//設定索引型別
updateRequest.doc(jsonData);//更新資料
client.update(updateRequest).actionGet();//執行更新
}
(5)刪除索引 [java] view plain copy print?
- /**
- * 刪除索引
- * @param indexName
- * @param typeName
- * @param id
- */
- publicvoid deleteIndex(String indexName, String typeName, String id) {
- client.prepareDelete(indexName, typeName, id).get();
- }
/**
* 刪除索引
* @param indexName
* @param typeName
* @param id
*/
public void deleteIndex(String indexName, String typeName, String id) {
client.prepareDelete(indexName, typeName, id).get();
}
4.建立測試類
[java] view plain copy print?- package com.elasticsearch.test;
- import org.elasticsearch.action.search.SearchResponse;
- import org.elasticsearch.index.query.QueryBuilder;
- import org.elasticsearch.index.query.QueryBuilders;
- import org.elasticsearch.search.SearchHit;
- import org.elasticsearch.search.SearchHits;
- publicclass Test {
- publicstaticvoid main(String[] args) {
- //建立物件,設定叢集名稱和IP地址
- ElasticsearchUtils es = new ElasticsearchUtils(“im_shan”,
- ”localhost”);
- String indexName = ”school”;//索引名稱
- String typeName = ”student”;//型別名稱
- String id = ”1”;
- String jsonData = ”{“ + “\”name\”:\”kimchy\”,”
- + ”\”birth\”:\”1995-01-30\”,” + “\”email\”:\”[email protected]\”“
- + ”}”;//json資料
- //1.建立索引(ID可自定義也可以自動建立,此處使用自定義ID)
- es.createIndex(indexName, typeName, id, jsonData);
- //2.執行查詢
- //(1)建立查詢條件
- QueryBuilder queryBuilder = QueryBuilders.termQuery(”name”, “kimchy”);//搜尋name為kimchy的資料
- //(2)執行查詢
- SearchResponse searchResponse = es.searcher(indexName, typeName,
- queryBuilder);
- //(3)解析結果
- SearchHits hits = searchResponse.getHits();
- SearchHit[] searchHits = hits.getHits();
- for (SearchHit searchHit : searchHits) {
- String name = (String) searchHit.getSource().get(”name”);
- String birth = (String) searchHit.getSource().get(”birth”);
- String email = (String) searchHit.getSource().get(”email”);
- System.out.println(name);
- System.out.println(birth);
- System.out.println(email);
- }
- //3.更新資料
- jsonData = ”{“ + “\”name\”:\”jack\”,” + “\”birth\”:\”1996-01-30\”,”
- + ”\”email\”:\”[email protected]\”“ + “}”;//json資料
- es.updateIndex(indexName, typeName, id, jsonData);
- //4.刪除資料
- es.deleteIndex(indexName, typeName, id);
- }
- }
package com.elasticsearch.test;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
public class Test {
public static void main(String[] args) {
//建立物件,設定叢集名稱和IP地址
ElasticsearchUtils es = new ElasticsearchUtils("im_shan",
"localhost");
String indexName = "school";//索引名稱
String typeName = "student";//型別名稱
String id = "1";
String jsonData = "{" + "\"name\":\"kimchy\","
+ "\"birth\":\"1995-01-30\"," + "\"email\":\"[email protected]\""
+ "}";//json資料
//1.建立索引(ID可自定義也可以自動建立,此處使用自定義ID)
es.createIndex(indexName, typeName, id, jsonData);
//2.執行查詢
//(1)建立查詢條件
QueryBuilder queryBuilder = QueryBuilders.termQuery("name", "kimchy");//搜尋name為kimchy的資料
//(2)執行查詢
SearchResponse searchResponse = es.searcher(indexName, typeName,
queryBuilder);
//(3)解析結果
SearchHits hits = searchResponse.getHits();
SearchHit[] searchHits = hits.getHits();
for (SearchHit searchHit : searchHits) {
String name = (String) searchHit.getSource().get("name");
String birth = (String) searchHit.getSource().get("birth");
String email = (String) searchHit.getSource().get("email");
System.out.println(name);
System.out.println(birth);
System.out.println(email);
}
//3.更新資料
jsonData = "{" + "\"name\":\"jack\"," + "\"birth\":\"1996-01-30\","
+ "\"email\":\"[email protected]\"" + "}";//json資料
es.updateIndex(indexName, typeName, id, jsonData);
//4.刪除資料
es.deleteIndex(indexName, typeName, id);
}
}
1.建立索引之後,可以在瀏覽器輸入http://localhost:9200/_plugin/head/ 進行檢視,可以發現索引已建立,index名稱為school,type為student,id為1
2.查詢索引,控制檯會輸出name為kimchy的birth、email的值
3.更新索引,此時再次進入http://localhost:9200/_plugin/head/ 進行檢視,發現內容已經改變
4.刪除索引,程式碼執行後輸入http://localhost:9200/_plugin/head/
檢視,內容已清空