文档地址
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();
网友评论