1.创建索引的索引名称必须为小写,大写会报错。
2.当没有为创建的索引指定Mapping时,es会为索引指定默认的Mapping(eg:字符串默认给keyword)。当查询的时候发现查不到,就有可能是忘记设置Mapping导致类型不对,无法进行分词检索。
3.当索引需要使用别名查询或者删除时,在创建索引的时候要为索引起别名。
es.addAlias([索引名], [别名]);插入索引
1.将list插入索引中,使用现有框架的方法异步插入即可,注意数据类型的正确性(eg:数值类型的字段如果写成keyword将不能区间查询)。
查询索引 通过KQL进行查询GET /temp.alias/_search
{
"query": {
"bool": {
"must": [
{
"term": {
"projName": {
"value": "帅气"
}
}
}
]
}
}
}
通过ES的Java-API对索引文档进行条件查询
1.首先创建搜索请求对象SearchRequest
SearchRequest searchRequest = new SearchRequest(TEMP_ALIAS);
2.创建BoolQueryBuilder对象,进行筛选条件填充(类似于sql的where的条件查询must[and]should[or])。BoolQueryBuilder可以多次定义,嵌套使用。
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
3.创建SearchSourceBuilder查询对象,并进行查询
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder(); sourceBuilder.query(boolQueryBuilder);
4.分页(类似于mysql的limit)
sourceBuilder.from((page - 1) * pageSize).size(pageSize);
5.排序(类似于sql的order by)
sourceBuilder.sort(orderColumn, SortOrder.ASC);
6.设置查询的超时时间
sourceBuilder.timeout(new TimeValue(10, TimeUnit.SECONDS));
7.set进搜索请求对象
searchRequest.source(sourceBuilder);
8.发起请求进行搜索
SearchResponse response = client.search(searchRequest, RequestOptions.DEFAULT); 部分响应字段: RestStatus status = searchResponse.status();//响应状态 TimeValue took = searchResponse.getTook();//查询时间 Boolean terminatedEarly = searchResponse.isTerminatedEarly();//请求是否提前终止 boolean timedOut = searchResponse.isTimedOut();//是否超时 response.getHits().totalHits;//命中次数
9.以Json-String或者map的形式获得查询结果。
String sourceAsString = hit.getSourceAsString(); MapsourceAsMap = hit.getSourceAsMap();
一般用法
//声明接收结果的集合 List推荐tempList = new ArrayList<>(); //遍历结果 Arrays.stream(response.getHits().getHits()).forEach(i -> { try { //通过jackson的ObjectMapper转化为对象 TempDtoDoc d = new ObjectMapper().readValue(i.getSourceAsString(),TempDtoDoc.class); TempDto temp= new TempDto(); BeanUtils.copyProperties(d, temp); //add到我们需要的list中 tempList.add(temp); } catch (IOException e) { logger.error(e.getMessage()); } });
在代码调试的过程中发现代码查不到数据,可以在拼接好查询条件后search之前打断点,拿到sourceBuilder的Json串,放到Kibana界面进行查询,寻找原因,这样可以更加直观的看到各个条件之间的逻辑关系。



