SpringDataElasticSearch框架
依赖关系
1 | xml复制代码<parent> |
配置yml
1 | yml复制代码spring: |
配置实体类和Document的对应关系
- @Document(indexName = “cube_goods”, shards = 5, replicas = 1)//配置对应的索引库、分片数、副本数
- @Id //指定id
- @Field(index = true, store = true, type = FieldType.Text, analyzer = “ik_smart”)
1 | java复制代码 |
文档的管理ElasticSearchRepository接口
使用方法
创建一个接口,继承与ElasticSearchRepository,指定使用的Entity类及对应主键数据类型,Springboot自动扫描接口并创建代理对象
- 新增、更新数据
- 使用repository的save方法实现
- 删除数据
- deleteById
- deleteAll
- 查询数据
- 可以使用repository自带的查询方法
- findById
- findAll
- 可以自定义查询方法
- findBy{Titlte}And{contnet}(String title, String content); 按照命名规则定义方法,就可以实现相应的查询
- 可以使用repository自带的查询方法
1 | java复制代码public interface BlogRepostory extends ElasticsearchRepository<Blog, Long> { |
使用ElasticSearchRestTemplate对象(复杂查询使用这个)
1)创建索引库
template.indexOps(IndexCoordinates.of(“mytest”)).create();
2)设置mapping信息
需要创建一个实体类,其中配置实体类和文档的映射关系,使用注解配置
可以从Entity中生成mapping信息
1 | java复制代码@RunWith(SpringRunner.class) |
3)查询
- 封装查询条件 NativeSearchQuery
- 执行查询 SearchHits searchHits = template.search(query, Blog.class);
- 结果处理
* 查询到的记录数 **searchHits.getTotalHits();**
* 查询的记录结果集 **List<SearchHit> searchHits1 = searchHits.getSearchHits();** 然后遍历
+ 查询的记录 **e.getContent()**
+ 高亮结果 **Map<String, List> highlightFields = e.getHighlightFields();**
**List title = highlightFields.get("title");**
+ 聚合结果 **Map<String, Aggregation> stringAggregationMap = searchHits.getAggregations().asMap();**
**Aggregation aggregation = stringAggregationMap.get("mobile\_count");**
**ParsedValueCount valueCount = searchHits.getAggregations().get("mobile\_count");**
**System.out.println(aggregation.getName());**
**System.out.println(valueCount.getValue());**
1 | java复制代码 |
本文转载自: 掘金