Java之ElasticSearch入門Demo

Check it out on github


demo-elastic-search

DESC:

  • spring 整合 elasticsearch
  • spring 整合 mybatis-plus
  • 包含事件封裝代碼練習
  • demo_test 沒有連接數據庫
  • demo_article 連接了數據庫

快速上手:

準備:

** ES 6-2-2下載地址 **
https://www.elastic.co/cn/downloads/past-releases/elasticsearch-6-2-2

** ik 分詞器下載 **
https://github.com/medcl/elasticsearch-analysis-ik/releases/tag/v6.2.2
解壓所有文件複製到elasticsearch的plugins目錄下(可以在plugins下新建ik文件夾,放在裏面方便更多插件整理)

** 最近參考的ES查詢API **
https://docs.spring.io/spring-data/elasticsearch/docs/3.0.8.RELEASE/reference/html/#repositories

pom.xml

<!-- es 啓動器, 7.0+ 需手動整合,配置 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>

application.yml

spring:
  # 配置 es
  data:
    elasticsearch:
      cluster-name: my-application
      cluster-nodes: 127.0.0.1:9300

demo

配置類

package com.quaint.demo.es.config;

@Configuration
public class ElasticSearchConfig {

    /**
     * 創建elasticsearchTemplate
     * @param client
     * @param converter
     * @return
     */
    @Bean
    public ElasticsearchTemplate elasticsearchTemplate(Client client, ElasticsearchConverter converter){
        return new ElasticsearchTemplate(client, converter,new DefaultResultMapper(converter.getMappingContext(),new DemoEntityMapper()));
    }
}

索引

package com.quaint.demo.es.search.index;

@Data
@Document(indexName = "demo_article")
public class DemoArticleIndex {

    @Id
    private Integer id;

    /**
     * 文章名稱
     */
    @Field(type = FieldType.Text, analyzer = "ik_max_word", searchAnalyzer = "ik_smart")
    private String title;

    /**
     * 內容
     */
    @Field(type = FieldType.Text)
    private String content;

    /**
     * 瀏覽量
     */
    @Field(type = FieldType.Integer)
    private Integer pageViews;

    /**
     * 創建時間
     */
    @Field(type = FieldType.Date)
    private LocalDateTime createTime;

}

資料庫

package com.quaint.demo.es.search.repository;

public interface DemoArticleRepository extends ElasticsearchRepository<DemoArticleIndex,Integer> {
}

測試執行

package com.quaint.demo.es.service.impl;

@Service
public class DemoArticleServiceImpl implements DemoArticleService {

    @Autowired
    DemoArticleRepository demoArticleRepository;


    @Override
    public DemoArticleDto getDemoArticleList(DemoArticleDto.Param param) {

        NativeSearchQueryBuilder queryBuilder = new NativeSearchQueryBuilder();

        // bool 查詢條件
        BoolQueryBuilder bool = new BoolQueryBuilder();
        if (StringUtils.isNotEmpty(param.getTitle())){
            bool.should(QueryBuilders.matchQuery("title",param.getTitle()));
        }
        if (StringUtils.isNotEmpty(param.getContent())){
            bool.should(QueryBuilders.matchQuery("content",param.getContent()));
        }

        // 過濾作品瀏覽數 大於1的
        bool.filter(QueryBuilders.rangeQuery("pageViews").gt(1));

        queryBuilder.withQuery(bool);

        // 數據排序, 隨機排序, 隨機後根據時間降序
        queryBuilder.withSort(SortBuilders.scriptSort(new Script("Math.random()"), ScriptSortBuilder.ScriptSortType.NUMBER));
        queryBuilder.withSort(SortBuilders.fieldSort("createTime").order(SortOrder.DESC));

        // 數據設置分頁, 不設置默認爲10條數據
        if (param.esStandardization()){
            queryBuilder.withPageable(PageRequest.of(param.getPageNum(),param.getPageSize()));
        }

        // 查詢
        Page<DemoArticleIndex> search = demoArticleRepository.search(queryBuilder.build());
        return processIndex2Dto(search);
    }
}

本次測試 可能會用到的 url 命令

** 測試使用到的url命令 **
// GET 索引列表
http://localhost:9200/_cat/indices?v

// GET 查看指定索引,指定類型,指定id的內容, pretty(格式化json顯示)
http://localhost:9200/demo/item/1?pretty

// GET 查看指定索引,指定類型 所有內容
http://localhost:9200/demo/item/_search?pretty

// DELETE 刪除對應索引
http://localhost:9200/demo

Check it out on github

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章