仅自己是记录用的,有错勿喷,
详细请查看官方文档
引入依赖
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
</dependency>
配置类
/**
* elasticSearch配配置
*
* @author surface
*/
@Configuration
public class MallElasticSearchConfig {
public static final RequestOptions COMMON_OPTIONS;
static {
RequestOptions.Builder builder = RequestOptions.DEFAULT.toBuilder();
// builder.addHeader("Authorization", "Bearer " + TOKEN);
// builder.setHttpAsyncResponseConsumerFactory(
// new HttpAsyncResponseConsumerFactory
// .HeapBufferedResponseConsumerFactory(30 * 1024 * 1024 * 1024));
COMMON_OPTIONS = builder.build();
}
/**
* 获取elasticSearch客户端
*
* @return
*/
@Bean
public RestHighLevelClient RestHighLevelClient() {
RestHighLevelClient client = new RestHighLevelClient(
RestClient.builder(
new HttpHost("IP地址", 9200, "http")));
return client;
}
}
简单使用
@SpringBootTest
@RunWith(SpringRunner.class)
public class SearchApplicationTests {
@Autowired
RestHighLevelClient client;
@Test
public void contextLoads() {
System.out.println(client);
}
/**
* 保存
* @throws IOException
*/
@Test
public void indexData() throws IOException {
//索引名
IndexRequest users = new IndexRequest("users");
users.id("1");//数据的id
User user = new User();
user.setName("梁金柯");
user.setAge(11);
String s = JSON.toJSONString(user);
//json数据,数据类型
users.source(s, XContentType.JSON);//设置要保存的内容
//执行保存的操作(有两种方式:同步和异步),并返回执行结果
IndexResponse index = client.index(users, MallElasticSearchConfig.COMMON_OPTIONS);
System.out.println(index);
}
@Test
public void getDate() throws IOException {
GetRequest getRequest = new GetRequest(
"users",
"1");
GetResponse documentFields = client.get(getRequest, MallElasticSearchConfig.COMMON_OPTIONS);
Map<String, Object> source = documentFields.getSource();
System.out.println(source);
}
/**
* 复杂搜索
* @throws IOException
*/
@Test
public void search() throws IOException {
//创建检索请求
SearchRequest searchRequest = new SearchRequest();
//指定索引
searchRequest.indices("users");
//指定DSL,检索条件
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.query(QueryBuilders.matchAllQuery());
// searchSourceBuilder.size();
// searchSourceBuilder.from();
// searchSourceBuilder.query();
// searchSourceBuilder.aggregations();
searchSourceBuilder.query(QueryBuilders.matchQuery("address","mill"));
//按照年龄的值分布进行聚合
TermsAggregationBuilder ageAgg = AggregationBuilders.terms("ageAgg").field("age").size(10);
searchSourceBuilder.aggregation(ageAgg);
//计算平均薪资
AvgAggregationBuilder balanceAvg = AggregationBuilders.avg("balanceAvg").field("balance");
searchSourceBuilder.aggregation(balanceAvg);
searchRequest.source(searchSourceBuilder);
System.out.println(searchSourceBuilder.toString());
//执行检索
SearchResponse search = client.search(searchRequest, MallElasticSearchConfig.COMMON_OPTIONS);
//分析结果
System.out.println(search);
//获取所有查到的数据
SearchHits hits = search.getHits();
SearchHit[] searchHits = hits.getHits();
for (SearchHit searchHit : searchHits) {
String sourceAsString = searchHit.getSourceAsString();
User user = JSON.parseObject(sourceAsString, User.class);
System.out.println(user);
}
}
@Data
class User{
private String name;
private Integer age;
}
}
批量添加
public class ProductSaveServiceImpl implements ProductSaveService {
@Autowired
RestHighLevelClient client;
@Override
public boolean productStatusUp(List<SkuEsModel> vos) throws IOException {
//保存到es
// 1.es建立索引,建立好对应的关系
//给es中保存这些数据
//传入全剧索引
BulkRequest bulkRequest = new BulkRequest("product");
for (SkuEsModel vo : vos) {
//构造保存请求
IndexRequest indexRequest = new IndexRequest();
indexRequest.id(vo.getSkuId().toString());
String s = JSON.toJSONString(vo);
indexRequest.source(s, XContentType.JSON);
bulkRequest.add(indexRequest);
}
BulkResponse bulk = client.bulk(bulkRequest, MallElasticSearchConfig.COMMON_OPTIONS);
boolean b = bulk.hasFailures();
List<String> collect = Arrays.stream(bulk.getItems()).map(item -> {
return item.getId();
}).collect(Collectors.toList());
log.error("商品上架成功,{}",collect);
return b;
}
}