1. 程式人生 > 其它 >推薦一個SpringBoot + Vue + MyBatis 音樂網站專案

推薦一個SpringBoot + Vue + MyBatis 音樂網站專案

官方文件:https://www.elastic.co/guide/en/elasticsearch/client/index.html

新建SpringBoot專案 引入Jar包

注意專案引入的elasticsearch的版本與自己安裝的版本是否一致:我本地安裝的版本7.15.1 ,專案引入的jar包版本:7.12.1

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <optional>true</optional>
            <scope>runtime</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.76</version>
        </dependency>

        <dependency>
            <groupId>org.jsoup</groupId>
            <artifactId>jsoup</artifactId>
            <version>1.10.2</version>
        </dependency>

        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>23.0</version>
        </dependency>


        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

新建ES的Config檔案

@Configuration
public class ElasticSearchClientConfig {

    @Bean
    public RestHighLevelClient restHighLevelClient() {
        RestHighLevelClient client = new RestHighLevelClient(
                RestClient.builder(
                        new HttpHost("localhost", 9200, "http"),
                        new HttpHost("localhost", 9201, "http")));
        return client;
    }
}

測試索引API

@Test
    public void createIndices() throws IOException {
        //1.建立索引
        CreateIndexRequest createIndexRequest = new CreateIndexRequest(Indices_01);
        //2.客戶端執行請求
        CreateIndexResponse createIndexResponse = restHighLevelClient.indices()
                .create(createIndexRequest, RequestOptions.DEFAULT);
        System.out.println("建立索引結果:" + createIndexResponse);
    }

    @Test
    public void getIndices() throws IOException {
        GetIndexRequest getIndexRequest = new GetIndexRequest(Indices_01);
        boolean exists = restHighLevelClient.indices()
                .exists(getIndexRequest, RequestOptions.DEFAULT);
        System.out.println("判斷索引是否存在:" + exists);
        GetIndexResponse getIndexResponse = restHighLevelClient.indices()
                .get(getIndexRequest, RequestOptions.DEFAULT);
        System.out.println("獲取索引結果:" + getIndexResponse);
    }

    @Test
    public void delIndices() throws IOException {
        DeleteIndexRequest deleteIndexRequest = new DeleteIndexRequest(Indices_01);
        AcknowledgedResponse delete = restHighLevelClient.indices()
                .delete(deleteIndexRequest, RequestOptions.DEFAULT);
        System.out.println("刪除索引結果:" + delete.isAcknowledged());
    }

測試文件API

@Test
    public void createDoc() throws IOException {
        School school = new School("深圳南山小學", "1,1,0,1");
        IndexRequest indexRequest = new IndexRequest(Indices_01);
        //規則:put /index/_doc/1
        indexRequest.id("1");
        indexRequest.timeout(TimeValue.timeValueSeconds(1));
        indexRequest.timeout("1s");

        indexRequest.source(school, XContentType.JSON);

        IndexResponse index = restHighLevelClient.index(indexRequest, RequestOptions.DEFAULT);
        System.out.println("建立文件:" + index.toString() + " status=" + index.status());

    }

    @Test
    public void getDoc() throws IOException {
        GetRequest getRequest = new GetRequest(Indices_01, "1");
        //不獲取返回的 _source 的上下文:
        getRequest.fetchSourceContext(new FetchSourceContext(false));
        getRequest.storedFields("_none_");
        boolean exists = restHighLevelClient.exists(getRequest, RequestOptions.DEFAULT);
        System.out.println("判斷文件是否存在:" + exists);

        GetResponse documentFields = restHighLevelClient.get(getRequest, RequestOptions.DEFAULT);
        System.out.println("獲取文件內容:" + documentFields.getSourceAsString());
    }

    @Test
    public void updateDoc() throws IOException {
        UpdateRequest updateRequest = new UpdateRequest(Indices_01, "1");
        updateRequest.timeout("1s");
        School school = new School("深圳福田小學", "1,1,0,1");
        updateRequest.doc(JSON.toJSONString(school), XContentType.JSON);
        UpdateResponse update = restHighLevelClient.update(updateRequest, RequestOptions.DEFAULT);
        System.out.println("更新文件結果:status=" + update.status());
    }

    @Test
    public void delDoc() throws IOException {
        DeleteRequest deleteRequest = new DeleteRequest(Indices_01, "1");
        deleteRequest.timeout("1s");

        DeleteResponse delete = restHighLevelClient.delete(deleteRequest, RequestOptions.DEFAULT);
        System.out.println("刪除文件結果:status=" + delete.status());
    }

批量儲存資料

@Test
    public void batchAddDoc() throws IOException {
        BulkRequest bulkRequest = new BulkRequest(Indices_01);
        bulkRequest.timeout("10s");
        List<School> list = Lists.newArrayList();
        for (int i = 0; i < 20; i++) {
            School school = new School("深圳隨機小學" + i, "1,0,1");
            list.add(school);
        }

        //批處理請求
        for (int i = 0; i < list.size(); i++) {
                bulkRequest.add(new IndexRequest(Indices_01)
                        .id("" + (i +1))
                        .source(JSON.toJSONString(list.get(i)), XContentType.JSON)
                );
        }

        BulkResponse bulk = restHighLevelClient.bulk(bulkRequest, RequestOptions.DEFAULT);
        //hasFailures(): 是否失敗 返回false 代表成功
        System.out.println("批量儲存文件結果:status=" + bulk.hasFailures());
    }

搜尋資料

@Test
    public void testSearch() throws IOException {
        SearchRequest searchRequest = new SearchRequest(Indices_01);
        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();

        //termQuery 精確匹配
        TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("name", "小學");
        //matchAllQuery 匹配所有
//        MatchAllQueryBuilder matchAllQueryBuilder1 = QueryBuilders.matchAllQuery();
        searchSourceBuilder.query(termQueryBuilder);
        //設定高亮
//        searchSourceBuilder.highlighter();
        //分頁:
//        searchSourceBuilder.from();
//        searchSourceBuilder.size();
        searchSourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));

        searchRequest.source(searchSourceBuilder);
        SearchResponse search = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);

        System.out.println("搜尋結果:" + JSON.toJSONString(search.getHits()));
        //列印命中文件資料
        SearchHits hits = search.getHits();
        Arrays.stream(hits.getHits()).forEach(e -> {
            System.out.println(e.getSourceAsString());
        });
    }