springboot2.x集成es
首先導入我們的pom依賴
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!--引入ELasticSearch的依賴包-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
<!--轉json的工具包,個人愛好,也可以用別的-->
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.5</version>
</dependency>
然後我們把我們的es的信息配置到yml文件中
server:
port: 80
es:
ip: 192.168.1.9
port: 9300
#連接池
pool: 5
#集羣名字
cluster:
name: my-application
因爲這裏配置了集羣節點名,所以需要在我們的config配置文件中修改我們的elasticSearch.yml配置文件
讀取yml信息,根據配置文件啓動es客戶端的配置類
package com.xy.elasticsearch.config;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.TransportAddress;
import org.elasticsearch.transport.client.PreBuiltTransportClient;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.net.InetAddress;
@Configuration
public class ElasticsearchConfig {
private static final Logger LOGGER = LoggerFactory.getLogger(ElasticsearchConfig.class);
/**
* elk集羣地址
*/
@Value("${es.ip}")
private String ip;
/**
* 端口
*/
@Value("${es.port}")
private String port;
/**
* 集羣名稱
*/
@Value("${es.cluster.name}")
private String clusterName;
/**
* 連接池
*/
@Value("${es.pool}")
private String pool;
/**
* Bean name default 函數名字
*
* @return
*/
@Bean(name = "transportClient")
public TransportClient transportClient() {
TransportClient transportClient = null;
try {
// 配置信息
Settings esSetting = Settings.builder()
.put("cluster.name", clusterName) //集羣名字
.put("client.transport.sniff", true)//增加嗅探機制,找到ES集羣
.put("thread_pool.search.size", Integer.parseInt(pool))//增加線程池個數,暫時設爲5
.build();
//配置信息Settings自定義
transportClient = new PreBuiltTransportClient(esSetting);
TransportAddress transportAddress = new TransportAddress(InetAddress.getByName(ip), Integer.valueOf(port));
transportClient.addTransportAddresses(transportAddress);
} catch (Exception e) {
LOGGER.error("elasticsearch TransportClient create error!!", e);
}
return transportClient;
}
}
ElasticSearch客戶端提供了多種方式的數據創建方式,包括json串,map,內置工具;我們正式開始一般用json格式,藉助json工具框架,比如gson ,json-lib,fastjson等等;
然後我們簡單測試一些數據,先增加一些json數據進去,然後用junit測試一下
package com.xy.elasticsearch;
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.action.search.SearchRequestBuilder;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.xcontent.XContentType;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.json.JSONArray;
import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
@SpringBootTest
class ElasticsearchApplicationTests {
@Autowired
private TransportClient client;
/**
* 創建索引 添加文檔
* @throws Exception
*/
@Test
public void testIndex() {
JsonArray jsonArray=new JsonArray();
JsonObject jsonObject=new JsonObject();
jsonObject.addProperty("title", "哪吒之魔童降世");
jsonObject.addProperty("publishDate", "2019-07-26");
jsonObject.addProperty("content", "天地靈氣孕育出一顆能量巨大的混元珠,元始天尊將混元珠提煉成靈珠和魔丸,靈珠投胎爲人,助周伐紂時可堪大用;而魔丸則會誕出魔王,爲禍人間。元始天尊啓動了天劫咒語,3年後天雷將會降臨,摧毀魔丸。太乙受命將靈珠託生於陳塘關李靖家的兒子哪吒身上。然而陰差陽錯,靈珠和魔丸竟然被掉包。本應是靈珠英雄的哪吒卻成了混世大魔王。調皮搗蛋頑劣不堪的哪吒卻徒有一顆做英雄的心。然而面對衆人對魔丸的誤解和即將來臨的天雷的降臨,哪吒是否命中註定會立地成魔?他將何去何從?");
jsonObject.addProperty("director", "餃子");
jsonObject.addProperty("price", "35");
jsonArray.add(jsonObject);
JsonObject jsonObject2=new JsonObject();
jsonObject2.addProperty("title", "寄生蟲");
jsonObject2.addProperty("publishDate", "2019-10-11");
jsonObject2.addProperty("content", "《寄生蟲》講述一家四口全是無業遊民的爸爸基澤(宋康昊飾)成天遊手好閒,直到積極向上的長子基宇(崔宇植飾)靠着僞造的文憑來到富豪樸社長(李善均飾)的家應徵家教,兩個天差地遠的家庭因而被捲入一連串意外事件中");
jsonObject2.addProperty("director", "奉俊昊");
jsonObject2.addProperty("price", "45");
jsonArray.add(jsonObject2);
JsonObject jsonObject3=new JsonObject();
jsonObject3.addProperty("title", "送我上青雲");
jsonObject3.addProperty("publishDate", "2019-08-16");
jsonObject3.addProperty("content", "《女記者盛男(姚晨飾),心高氣傲,個性剛硬,渴望真愛仍孑然一身,懷抱理想卻屢屢在現實中碰壁。盛男意外地患上了卵巢癌,爲了籌得手術費,她不得不接受一份自己不喜歡的工作,爲一位企業家的父親寫自傳,也因此踏上一段尋求愛慾亦是尋找自我的旅程。");
jsonObject3.addProperty("director", "滕叢叢");
jsonObject3.addProperty("price", "55");
jsonArray.add(jsonObject3);
JsonObject jsonObject4=new JsonObject();
jsonObject4.addProperty("title", "復仇者聯盟4");
jsonObject4.addProperty("publishDate", "2019-04-14");
jsonObject4.addProperty("content", "來自泰坦星的滅霸(喬什·布洛林飾)爲了解決宇宙資源匱乏、人口暴增的問題,集齊6顆無限寶石,一個響指讓全宇宙生命公平隨機的減半。宇宙由於瘋狂的泰坦滅霸的行動而變得滿目瘡痍,在泰坦星與滅霸決戰失敗的鋼鐵俠(小羅伯特·唐尼飾)孤身一人漂流宇宙,迷失在量子領域的蟻人(保羅·路德飾)意外回到現實世界,他的出現爲倖存的復仇者們點燃了希望。無論前方將遭遇怎樣的後果,倖存的超級英雄們都必須在剩餘盟友的幫助下再一次集結,以逆轉滅霸的所作所爲,徹底恢復宇宙的秩序。");
jsonObject4.addProperty("director", "喬·羅素安東尼·羅素");
jsonObject4.addProperty("price", "35");
jsonArray.add(jsonObject4);
JsonObject jsonObject5=new JsonObject();
jsonObject5.addProperty("title", "蜘蛛俠:英雄遠征");
jsonObject5.addProperty("publishDate", "2019-06-28");
jsonObject5.addProperty("content", "在復仇者聯盟衆英雄的努力下,於滅霸無限手套事件中化作爲灰燼的人們,重新回到了人世間,曾經消失的蜘蛛俠 彼得帕克 也迴歸到了普通的生活之中,數月後,蜘蛛俠彼得帕克所在的學校舉行了歐洲旅遊,帕克也在其中, 在歐州威尼斯旅行時,一個巨大無比的水怪襲擊了威尼斯,不敵敵人的蜘蛛俠幸得一位自稱神祕客的男子搭救才擊退敵人,之後 神盾局局長找上正在旅遊的彼得帕克並要求其加入神盾局,並安排神祕客協助帕克,神祕客自稱來自其他宇宙,並告知一羣名爲元素衆的邪惡勢力已經入侵這個宇宙了,爲了守護來之不易的和平,蜘蛛俠決定與神祕客聯手,然而在神祕客那頭罩之中,似乎隱藏着什麼不爲人知的真相……");
jsonObject5.addProperty("director", "喬·沃茨");
jsonObject5.addProperty("price", "38");
jsonArray.add(jsonObject5);
JsonObject jsonObject6=new JsonObject();
jsonObject6.addProperty("title", "羅小黑戰記");
jsonObject6.addProperty("publishDate", "2019-09-07");
jsonObject6.addProperty("content", "在熙攘的人類世界裏,很多妖精隱匿其中,他們與人類相安無事地生活着。貓妖羅小黑因爲家園被破壞,開始了它的流浪之旅。這場旅途中惺惺相惜的妖精同類與和諧包容的人類夥伴相繼出現,讓小黑陷入了兩難抉擇,究竟何處纔是真正的歸屬 [3] ?");
jsonObject6.addProperty("director", "MTJJ");
jsonObject6.addProperty("price", "38");
jsonArray.add(jsonObject6);
for(int i=0;i<jsonArray.size();i++){
JsonObject jo=jsonArray.get(i).getAsJsonObject();
IndexResponse response=client.prepareIndex("film", "new")
.setSource(jo.toString(), XContentType.JSON).get();
System.out.println("索引名稱:"+response.getIndex());
System.out.println("類型:"+response.getType());
System.out.println("文檔ID:"+response.getId());
System.out.println("當前實例狀態:"+response.status());
}
}
/**
* 查詢所有
* @throws Exception
*/
@Test
public void searchAll()throws Exception{
SearchRequestBuilder srb=client.prepareSearch("film").setTypes("new");
SearchResponse sr=srb.setQuery(QueryBuilders.matchAllQuery()).execute().actionGet(); // 查詢所有
SearchHits hits=sr.getHits();
for(SearchHit hit:hits){
System.out.println(hit.getSourceAsString());
}
}
}
然後我們可以在header插件中看到我們剛剛插入的數據
然後運行我們的查詢方法,也能查詢到我們的數據
後面我會專門整理一篇博客來記錄es的其他常用操作
end…