ElasticSearch快速开始

2020-06-02  本文已影响0人  扮鬼之梦

文档地址

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();
上一篇下一篇

猜你喜欢

热点阅读