ElasticSearch(2):Java 鏈接 ElasticSearch 客戶端入門

ElasticSearch(2):Java 鏈接 ElasticSearch 客戶端入門

1.入門簡介

使用Java 鏈接并且操作 ES 有兩種方式 1.SpringDataElasticSearch 2.使用 ES 原生的鏈接方式揍瑟。使用第一種方式
的話,需要注意ES版本號與Spring Data ElasticSearch 版本的號需要對應(yīng)才行。因為ES的版本更新快且每一個大的版本
更新都會有一些API發(fā)生變化。所以,如果使用SpringDataElasticSearch的方式的話差购,需要注意版本的對應(yīng)關(guān)系。

對應(yīng)關(guān)系如下:

Spring Data Release Train Spring Data Elasticsearch Elasticsearch Spring Boot
Moore 3.2.x 6.8.4 2.2.x
Lovelace 3.1.x 6.2.2 2.1.x
Kay 3.0.x 5.5.0 2.0.x
Ingalls 2.1.x 2.4.0 1.5.x

各個版本號必須一致才行否則的話,就會出現(xiàn)各種問題那槽。我這里使用的是第二種方法來鏈接ES客戶端,通過
RestHighLevelClient 客戶端來進行操作等舔。

2.鏈接客戶端

需要引入maven依賴:由于我這里電腦本機上安裝的是7.4.0版本的骚灸,所以我這里引入了三個ES相關(guān)的依賴

<dependency>
   <groupId>org.elasticsearch.client</groupId>
   <artifactId>elasticsearch-rest-high-level-client</artifactId>
   <version>7.4.0</version>
</dependency>
<dependency>
    <groupId>org.elasticsearch.client</groupId>
    <artifactId>elasticsearch-rest-client</artifactId>
    <version>7.4.0</version>
</dependency>
<dependency>
    <groupId>org.elasticsearch</groupId>
    <artifactId>elasticsearch</artifactId>
    <version>7.4.0</version>
</dependency>

我創(chuàng)建了一個新的SpringBoot項目,所以我這里直接把鏈接ES的過程封裝成了一個SpringBean的方式慌植。
讓SpringBoot項目啟動之后自動鏈接ES甚牲。
1.新建SpringBoot項目。pom.xml結(jié)構(gòu)如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.1.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.snowy</groupId>
    <artifactId>testes</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>testes</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <!--elastic 的 三個依賴 -->
        <dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>elasticsearch-rest-high-level-client</artifactId>
            <version>7.4.0</version>
        </dependency>
        <dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>elasticsearch-rest-client</artifactId>
            <version>7.4.0</version>
        </dependency>
        <dependency>
            <groupId>org.elasticsearch</groupId>
            <artifactId>elasticsearch</artifactId>
            <version>7.4.0</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

2.創(chuàng)建elasticsearch.properties 文件

pzkj.elasticsearch.host=localhost
pzkj.elasticsearch.port=9200
pzkj.elasticsearch.scheme=http

主要是配置ES的鏈接地址以機端口等信息蝶柿。
3.創(chuàng)建ElasticSearchConfig 文件并將其注入到SpringBean容器中丈钙。

@Configuration
@PropertySource(value = "classpath:config/elasticsearch.properties")
public class ElasticSearchConfig {

    private Logger logger = LogManager.getLogger(ElasticSearchConfig.class);

    @Value(value = "${pzkj.elasticsearch.host}")
    String host;
    @Value(value = "${pzkj.elasticsearch.port}")
    String port;
    @Value(value = "${pzkj.elasticsearch.scheme}")
    String scheme;

    /**
     * ClientConfiguration 該對象可以更改客戶端行為,哦誒之ssl只锭,連接著恩,以及套接字超時選項等
     * @return
     */
    @Bean
    public RestHighLevelClient restHighLevelClient(){
        HttpHost httpHost = new HttpHost(host, Integer.parseInt(port), scheme);
        RestHighLevelClient restHighLevelClient = new RestHighLevelClient(RestClient.builder(httpHost));
        logger.info("成功注冊到Spring容器中。");
        return restHighLevelClient;
    }

}

此時蜻展,運行SringBoot項目喉誊,就自動將鏈接ES的過程注入到了SpringBean容器中了。

3.一個簡單的測試?yán)觼韺懭牒筒樵償?shù)據(jù):
@SpringBootTest
class TestesApplicationTests {

    @Autowired
    RestHighLevelClient restHighLevelClient;

    /* 寫入數(shù)據(jù) */
    @Test
    void contextLoads() {
        HttpHost httpHost = new HttpHost("localhost", 9200, "http");
        RestHighLevelClient restHighLevelClient = new RestHighLevelClient(RestClient.builder(httpHost));
        Map<String, Object> jsonMap = new HashMap<>();
        /*jsonMap.put("user", "何必平");
        jsonMap.put("postDate", new Date());
        jsonMap.put("message", "永安當(dāng)掌柜的跟班纵顾,極具商業(yè)才華伍茄,在大戰(zhàn)中名為反叛實則臥底,最后被邪劍仙殺死施逾。");*/
        jsonMap.put("user", "何必平");
        jsonMap.put("postDate", new Date());
        jsonMap.put("message", "永安當(dāng)掌柜的跟班敷矫,景天死忠");
        IndexRequest indexRequest = new IndexRequest("posts").source(jsonMap);
        try {
            IndexResponse index = restHighLevelClient.index(indexRequest, RequestOptions.DEFAULT);
            System.out.printf(index.toString());
            restHighLevelClient.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    /* 獲取數(shù)據(jù) */
    @Test
    public void getRequest(){
        GetRequest posts = new GetRequest("posts", "1");
        try {
            GetResponse documentFields = restHighLevelClient.get(posts, RequestOptions.DEFAULT);
            restHighLevelClient.close();
            Map<String, Object> sourceAsMap = documentFields.getSourceAsMap();
            sourceAsMap.forEach((key, value) -> {
                System.out.println("=========================");
                System.out.println(key);
                System.out.println(value);
            });
        } catch (IOException e) {
            e.printStackTrace();
        }
    }


}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市汉额,隨后出現(xiàn)的幾起案子曹仗,更是在濱河造成了極大的恐慌,老刑警劉巖蠕搜,帶你破解...
    沈念sama閱讀 211,817評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件怎茫,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機轨蛤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評論 3 385
  • 文/潘曉璐 我一進店門蜜宪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人祥山,你說我怎么就攤上這事圃验。” “怎么了缝呕?”我有些...
    開封第一講書人閱讀 157,354評論 0 348
  • 文/不壞的土叔 我叫張陵澳窑,是天一觀的道長。 經(jīng)常有香客問我岳颇,道長照捡,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,498評論 1 284
  • 正文 為了忘掉前任话侧,我火速辦了婚禮,結(jié)果婚禮上闯参,老公的妹妹穿的比我還像新娘瞻鹏。我一直安慰自己,他們只是感情好鹿寨,可當(dāng)我...
    茶點故事閱讀 65,600評論 6 386
  • 文/花漫 我一把揭開白布新博。 她就那樣靜靜地躺著,像睡著了一般脚草。 火紅的嫁衣襯著肌膚如雪赫悄。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,829評論 1 290
  • 那天馏慨,我揣著相機與錄音埂淮,去河邊找鬼。 笑死写隶,一個胖子當(dāng)著我的面吹牛倔撞,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播慕趴,決...
    沈念sama閱讀 38,979評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼痪蝇,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了冕房?” 一聲冷哼從身側(cè)響起躏啰,我...
    開封第一講書人閱讀 37,722評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎耙册,沒想到半個月后给僵,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,189評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡觅玻,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,519評論 2 327
  • 正文 我和宋清朗相戀三年想际,在試婚紗的時候發(fā)現(xiàn)自己被綠了培漏。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,654評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡胡本,死狀恐怖牌柄,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情侧甫,我是刑警寧澤珊佣,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站披粟,受9級特大地震影響咒锻,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜守屉,卻給世界環(huán)境...
    茶點故事閱讀 39,940評論 3 313
  • 文/蒙蒙 一惑艇、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧拇泛,春花似錦滨巴、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,762評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至熄守,卻和暖如春蜈垮,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背裕照。 一陣腳步聲響...
    開封第一講書人閱讀 31,993評論 1 266
  • 我被黑心中介騙來泰國打工攒发, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人牍氛。 一個月前我還...
    沈念sama閱讀 46,382評論 2 360
  • 正文 我出身青樓晨继,卻偏偏與公主長得像,于是被迫代替她去往敵國和親搬俊。 傳聞我的和親對象是個殘疾皇子紊扬,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,543評論 2 349

推薦閱讀更多精彩內(nèi)容