栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

ES-API开发常用功能

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

ES-API开发常用功能

ES-API开发常用功能 创建索引

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();
Map sourceAsMap = 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界面进行查询,寻找原因,这样可以更加直观的看到各个条件之间的逻辑关系。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1020385.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号