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