1. 程式人生 > 其它 >ElasticSearch 7.6.x 版本 2020最新版 JavaRest api

ElasticSearch 7.6.x 版本 2020最新版 JavaRest api

ElasticSearch 7.6.x 版本 2020最新版 JavaRest api

前言

週末閒來無事,到官網學習(fanyi)了下最新版本的ESJavaRest API。
ES版本:7.6.2
Springboot版本:2.2.6

目錄

準備工作及注意事項

1. Maven導包

Springboot 2.2.6預設幫我們匯入的是ES 6.8.7的包,所以我們需要更改下版本

<elasticsearch.version>7.6.1</elasticsearch.version>
  • 1

2. 初始化Client

@Configuration
public class ElasticSearchConfig {

    @Bean
    public RestHighLevelClient client(){
        RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(
                new HttpHost("localhost",9200,"http")
        ));
        return client;
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

索引(index)

增加索引

    //建立索引
    @Test
    void createIndex() throws IOException {
        CreateIndexRequest request = new CreateIndexRequest("index1");
        CreateIndexResponse createIndexResponse =
                client.indices().create(request, RequestOptions.DEFAULT);
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

刪除索引

    //刪除索引
    @Test
    void deleteIndex() throws IOException {
        DeleteIndexRequest request = new DeleteIndexRequest("index1");
        AcknowledgedResponse delete = client.indices().delete(request, RequestOptions.DEFAULT);
        boolean isSuccessful = delete.isAcknowledged();

        System.out.println(isSuccessful);
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

查詢索引是否存在

    //返回索引是否存在
    @Test
    void existIndex() throws IOException {
        GetIndexRequest request = new GetIndexRequest("index1");
        boolean exists = client.indices().exists(request, RequestOptions.DEFAULT);

        System.out.println(exists);
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

文件(document)

新增文件

    //新增文件
    @Test
    void addDocument() throws IOException {
        User user = new User("dai", 22);
        IndexRequest request = new IndexRequest("index1")
                .id("1")
                .timeout(TimeValue.timeValueSeconds(1));

        IndexRequest source = request.source(JSON.toJSONString(user), XContentType.JSON);

        IndexResponse indexResponse = client.index(request, RequestOptions.DEFAULT);

        System.out.println(indexResponse.toString());
        System.out.println(indexResponse.status());
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

刪除文件

    //刪除文件
    @Test
    void deleteDocument() throws IOException {
        DeleteRequest request = new DeleteRequest("index1", "2");
        request.timeout("1s");
        DeleteResponse deleteResponse = client.delete(request, RequestOptions.DEFAULT);

        System.out.println(deleteResponse.status());
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

查詢文件是否存在

    //判斷文件是否存在
    @Test
    void isExistDocument() throws IOException {
        GetRequest request = new GetRequest("index1", "1");
        //不獲取_source內容,提升效率
        request.fetchSourceContext(new FetchSourceContext(false));
        request.storedFields("_none_");

        boolean exists = client.exists(request, RequestOptions.DEFAULT);
        System.out.println(exists);
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

更新文件

    //更新文件
    @Test
    void updateDocument() throws IOException {
        UpdateRequest request = new UpdateRequest("index1", "1");
        request.timeout("1s");

        User user = new User("dai2", 22);
        request.doc(JSON.toJSONString(user), XContentType.JSON);
        UpdateResponse updateResponse = client.update(request, RequestOptions.DEFAULT);

        System.out.println(updateResponse.status());
    }

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

資料(datas)

批量插入資料

    //批量插入資料
    @Test
    void BulkRequest() throws IOException {

        BulkRequest bulkRequest = new BulkRequest()
                .timeout("5s");
        List<User> users = Arrays.asList(new User("dai1", 1), new User("dai2", 2), new User("dai3", 3));

        for (User user : users) {
            bulkRequest.add(new IndexRequest("index1")
                    //.id("xxx")
                    .source(JSON.toJSONString(user), XContentType.JSON));
        }

        BulkResponse bulkResponse = client.bulk(bulkRequest, RequestOptions.DEFAULT);
        //是否失敗,false表示成功
        System.out.println(bulkResponse.hasFailures());
        System.out.println(bulkResponse.status());
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

查詢

    //查詢
    @Test
    void search() throws IOException {
        SearchRequest request = new SearchRequest("index1");

        //構建搜尋條件
        SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();

        // SearchRequest 搜尋請求
        // SearchSourceBuilder 條件構造
        // HighlightBuilder 構建高亮
        // TermQueryBuilder 精確查詢
        // MatchAllQueryBuilder .....
        MatchAllQueryBuilder matchAllQueryBuilder = QueryBuilders.matchAllQuery();
        sourceBuilder.query(matchAllQueryBuilder)
                .timeout(new TimeValue(60, TimeUnit.SECONDS));

        request.source(sourceBuilder);

        SearchResponse searchResponse = client.search(request, RequestOptions.DEFAULT);
        System.out.println(JSON.toJSONString(searchResponse.getHits(), true));
        System.out.println("===================================");
        for (SearchHit documentFields : searchResponse.getHits()) {
            System.out.println(documentFields.getSourceAsMap());
        }

    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

點個贊再走,球球啦!

原創不易,白嫖不好,各位的支援和認可,就是我創作的最大動力,我們下篇文章見!

本部落格僅釋出於CSDN—一個帥到不能再帥的人 Mr_kidBK。轉載請標明出處。
https://blog.csdn.net/Mr_kidBK

點贊!收藏!轉發!!!麼麼噠!
點贊!收藏!轉發!!!麼麼噠!
點贊!收藏!轉發!!!麼麼噠!
點贊!收藏!轉發!!!麼麼噠!
點贊!收藏!轉發!!!麼麼噠!

======================================================================================

springboot整合elasticsearch-rest-high-level-client的坑

原創 MuzzyXu Elasticsearch 2019/09/23 17:01 閱讀數 3.9W 本文被收錄於專區 開發技能 進入專區參與更多專題討論

我使用的是Elasticsearch7.2.0,由於官網上推薦使用elasticsearch-rest-high-level-client端整合在springboot所以嘗試爬坑。

首先直接引入官網的配置檔案

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

然後在執行時報錯:

...
...
Caused by: java.lang.ClassNotFoundException: org.elasticsearch.common.xcontent.DeprecationHandler
...
...

百度了一下說jar裡的Elasticsearch版本有錯,要移除了再重新引入,所以把配置檔案改成下面的樣子

        <dependency>
		    <groupId>org.elasticsearch.client</groupId>
		    <artifactId>elasticsearch-rest-high-level-client</artifactId>
		    <version>7.2.0</version>
		    <exclusions>
	       <exclusion>
	         <groupId>org.elasticsearch</groupId>
	         <artifactId>elasticsearch</artifactId>
	       </exclusion>
	     </exclusions>
		</dependency>
		
		<!-- 正確版本 -->
		<dependency>
            <groupId>org.elasticsearch</groupId>
            <artifactId>elasticsearch</artifactId>
            <version>7.2.0</version>
        </dependency>

然後再次啟動,Elasticsearch正常執行,但是發現spring的rest服務執行不正常,配置的Filter沒有正常執行,且不報錯。網上找了很久也沒有找到有類似錯誤的問題,後來反覆檢視官網,他說elasticsearch-rest-high-level-client是基於elasticsearch-rest-client的,我就猜這個基於會不會是依賴的意思呢?

於是把配置改成了這樣:

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

		<dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>elasticsearch-rest-client</artifactId>
            <version>7.2.0</version>
        </dependency>
		
		<dependency>
            <groupId>org.elasticsearch</groupId>
            <artifactId>elasticsearch</artifactId>
            <version>7.2.0</version>
        </dependency>

然後再次啟動,Elasticsearch正常執行,REST服務也正常,我的老天鵝,終於可以了。

後來我找到了這篇文章Elasticsearch High Level REST Client,具體配置可以參考下

https://blog.csdn.net/mr_kidbk/article/details/105477095

https://my.oschina.net/u/3362856/blog/3109764

高亮查詢

https://blog.csdn.net/qq_43750656/article/details/106752154