0
点赞
收藏
分享

微信扫一扫

ElasticSearch快速开始

在觉 2021-10-09 阅读 69
日记本

文档地址

faster框架ES配置文档

https://framework.faster.org.cn/#/advanced/Elasticsearch/quickstart

faster框架ES版本选择

因为faster使用的SpringBoot版本为2.1.5,所以ES客户端需要安装6.1.1。
使用最新版的SpringBoot的话,可以使用ES版本为7.7.0的。

SpringBoot项目ElasticSearch配置

根据ES版本和SpringBoot版本查询官方文档即可。

常用命令

1.删除索引

用以下的请求来 删除索引:

DELETE /my_index

你也可以这样删除多个索引:

DELETE /index_one,index_two
DELETE /index_*

你甚至可以这样删除 全部 索引:

DELETE /_all
DELETE /*

2.获取设置_settings信息

GET _settings

3.设置max_result_window

PUT _settings
{
"index": {
"max_result_window": "10000000"
}
}

ElasticsearchRepository操作ES

新建实体

import lombok.Data;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Field;
import org.springframework.data.elasticsearch.annotations.FieldType;

@Document(indexName = "sim_info", type = "sim_info")
@Data
public class CardInfo {
@Id
private Long id;

@Field(type = FieldType.Keyword)
private String msisdn;

@Field(type = FieldType.Keyword)
private String iccid;

@Field(type = FieldType.Keyword)
private String imsi;

@Field(type = FieldType.Long)
private Long customerId;

@Field(type = FieldType.Integer)
private Integer telecomOperator;

@Field(type = FieldType.Keyword)
private String outStoreDate;

@Field(type = FieldType.Boolean)
private Boolean supportSms;

@Field(type = FieldType.Double)
private Double totalDataAmount;

}

新建Repository

import com.whty.esim.model.document.CardInfo;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;

//<CardInfo, Long> CardInfo为实体类,Long为主键数据类型
public interface SimInfoRepository extends ElasticsearchRepository<CardInfo, Long> { }

注入Repository

@Autowired
private SimInfoRepository simInfoRepository;

导入数据

simInfoRepository.saveAll(list);

各类查询参考文档

https://blog.csdn.net/HiBoyljw/article/details/89951019

分页查询

//页码从0开始,每页任意条
PageRequest of = PageRequest.of(0, 10);
Page<CardInfoRes> page = null;
try {
//分页并带查询条件
//BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
//boolQueryBuilder.must(QueryBuilders.wildcardQuery("msisdn","*11111*"));
//page =simInfoRepository.search(boolQueryBuilder,of);

page =simInfoRepository.findAll(of);
}catch (Exception e){
throw new BusinessException("查询失败");
}

当pageIndex*pageSize大于10000时,会抛以下异常

org.elasticsearch.action.search.SearchPhaseExecutionException: all shards failed

需在ES客户端设置max_result_window

PUT _settings
{
"index": {
"max_result_window": "10000000"
}
}

组合查询

BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
//AND
boolQueryBuilder.must(QueryBuilder);
//NOT
boolQueryBuilder.mustNot(QueryBuilder);
//OR
boolQueryBuilder.should(QueryBuilder);

精确查询

//完全匹配
QueryBuilders.termQuery("key", obj);
//一次匹配多个值
QueryBuilders.termsQuery("key", obj1, obj2..);
//单个匹配, field不支持通配符, 前缀具高级特性
QueryBuilders.matchQuery("key", Obj);
//匹配多个字段
QueryBuilders.multiMatchQuery("text", "field1", "field2"..);

通配符查询,模糊查询

QueryBuilders.wildcardQuery("msisdn","*11111*")

前缀查询

QueryBuilders.prefixQuery("msisdn","111111")

Count查询

PageRequest of = PageRequest.of(0, 1);
//boolQueryBuilder为查询条件
long count = simInfoRepository.search(boolQueryBuilder, of).getTotalElements();

范围查询

//方法一
QueryBuilders.rangeQuery("offeringEndDate")
.from("2020-01-05",true).to("2020-01-05",true);
//方法二
QueryBuilders.rangeQuery("offeringEndDate")
.gte("2020-01-03").lte("2020-01-05");

ElasticsearchTemplate操作ES

注入ElasticsearchTemplate

@Autowired
private ElasticsearchTemplate elasticsearchTemplate;

删除索引

boolean flag = elasticsearchTemplate.deleteIndex("sim_info");

判断索引是否存在

boolean flag = elasticsearchTemplate.indexExists("sim_info")

获取索引Setting

Map settingMap = elasticsearchTemplate.getSetting("sim_info");

设置索引Setting

UpdateSettingsResponse indexResponse = elasticsearchTemplate.getClient()
.admin().indices().prepareUpdateSettings("sim_info")
.setSettings(
Settings.builder()
.put("index.max_result_window", 10000000)
.build()
).get();
indexResponse.isAcknowledged();
举报

相关推荐

0 条评论