一、bulk批量查询
# 批量操作
# 删除5号记录
# 添加8号记录
# 修改2号的名词为二号
POST _bulk
{"delete":{"_index":"person","_id":"5"}}
{"create":{"_index":"person","_id":"8"}}
{"name":"八号","age":80,"address":"北京"}
{"update":{"_index":"person","_id":"2"}}
{"doc":{"name":"二号"}}
@Test
public void testBulk() throws IOException {
// 创建bulkRequest对象,整合所有操作
BulkRequest bulkRequest = new BulkRequest();
// 1、删除1号记录
DeleteRequest deleteRequest = new DeleteRequest("person", "1");
bulkRequest.add(deleteRequest);
// 2、添加6号记录
Map map = new HashMap();
map.put("name", "六号");
IndexRequest addRequest = new IndexRequest("person").id("6").source(map);
bulkRequest.add(addRequest);
// 3、修改3号记录的名称为三号
Map map2 = new HashMap();
map2.put("name", "三号");
UpdateRequest updateRequest = new UpdateRequest("person", "3").doc(map2);
bulkRequest.add(updateRequest);
// 执行批量操作
BulkResponse response = client.bulk(bulkRequest, RequestOptions.DEFAULT);
System.out.println(response.status());
}
二、bulk批量导入
/**
* 批量导入
*/
@Test
public void importData() throws IOException {
List<Goods> goodsList = goodsMapper.findAll();
System.out.println(goodsList.size());
// bulk导入
BulkRequest bulkRequest = new BulkRequest();
for (Goods goods : goodsList) {
// 获取specStr
goods.setSpec(JSON.parseObject(goods.getSpecStr(), Map.class));
IndexRequest indexRequest = new IndexRequest("goods");
// id用来指定es中的id字段,source用来指定data,source里可以传map也可以传json,传json时需要指定类型
indexRequest.id(goods.getId() + "").source(JSON.toJSONString(goods), XContentType.JSON);
bulkRequest.add(indexRequest);
}
client.bulk(bulkRequest, RequestOptions.DEFAULT);
}
三、match_all
GET goods/_search
{
"query":{
"match_all": {}
}
}
GET goods/_search
{
"query":{
"match_all": {}
},
"from": 0,
"size": 20
}
tips:
- 如果在es中重复的执行相同的查询语句,会发现查询所耗费的时间(took)会越来越少,因为es中是有缓存的,会把执行的结果缓存到内存中。
- max_score:根据得分进行排序,得分高的排在前面
- source中存放的就是数据
- 对于es中json串的显示,es-head的显示方式为:
- searchResponse就是查询出来的那个大json:
/**
* 查询所有
* match_all
* 将查询结果封装为Goods对象,装载到list中
* 分页显示,默认显示10条
*/
@Test
public void testMatchAll() throws IOException {
// 2、构建查询请求对象,指定查询的索引名称
SearchRequest searchRequest = new SearchRequest("goods");
// 4、创建查询条件构建器SearchSourceBuilder
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
// 6、查询条件(查询所有文档)
QueryBuilder query = QueryBuilders.matchAllQuery();
// 5、指定查询条件(查询条件构建器装载查询条件)
sourceBuilder.query(query);
// 8、添加分页信息
sourceBuilder.from(0);
sourceBuilder.size(100);
// 3、添加查询条件构建器(查询请求对象装载查询条件构建器)
searchRequest.source(sourceBuilder);
// 1、查询
SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
// 7、获取命中对象searchHits
SearchHits searchHits = searchResponse.getHits();
// 7.1 获取总记录数(它将hits中的total封装成了totalHits)
long value = searchHits.getTotalHits().value;
System.out.println("总记录数:" + value);
List<Goods> goodsList = new ArrayList<>();
// 7.2 获取Hits数组
SearchHit[] hits = searchHits.getHits();
for (SearchHit hit : hits) {
// 获取hit中的source数据
String sourceAsString = hit.getSourceAsString();
Goods goods = JSON.parseObject(sourceAsString, Goods.class);
goodsList.add(goods);
}
goodsList.forEach(c -> System.out.println(JSON.toJSONString(c)));
}
}