<!--elastic-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-elasticsearch</artifactId>
</dependency>
@Component
@Configuration
@ConfigurationProperties(prefix = "spring.elasticsearch.rest")
public class ElasticSearchConfig extends AbstractElasticsearchConfiguration {
private String uris = "192.168.1.xxx:8080";
private String username = "elastic";
private String password = "xxxxxxx";
@Override
@Bean(destroyMethod = "close")
public RestHighLevelClient elasticsearchClient() {
final ClientConfiguration clientConfiguration = ClientConfiguration.builder()
.connectedTo(uris)
.withBasicAuth(username, password)
.build();
return RestClients.create(clientConfiguration).rest();
}
}
@SpringBootTest
class SpringbootEsApplicationTests {
@Autowired
private RestHighLevelClient client;
//创建索引
@Test
void testCreateIndex() throws IOException {
//获取对应索引操作的类对象IndicesClient
IndicesClient indices = client.indices();
//获取创建索引的请求对象---封装了关于索引的信息。
CreateIndexRequest indexRequest=new CreateIndexRequest("qy159-index");
CreateIndexResponse indexResponse = indices.create(indexRequest, RequestOptions.DEFAULT);
System.out.println("是否创建成功:"+indexResponse.isAcknowledged());
}
@Test
public void test01() throws IOException {
//获取对应索引操作的类对象IndicesClient
IndicesClient indices = client.indices();
//获取创建索引的请求对象---封装了关于索引的信息。
CreateIndexRequest indexRequest=new CreateIndexRequest("qy159-index");
CreateIndexResponse indexResponse = indices.create(indexRequest, RequestOptions.DEFAULT);
System.out.println("是否创建成功:"+indexResponse.isAcknowledged());
}
//判断索引是否存在.
@Test
public void testExist() throws IOException {
IndicesClient indices = client.indices();
GetIndexRequest getIndexRequest=new GetIndexRequest("qy158-index");
boolean exists = indices.exists(getIndexRequest, RequestOptions.DEFAULT);
System.out.println("是否存在:"+exists);
}
//删除索引
@Test
public void deleteIndex()throws IOException {
IndicesClient indices = client.indices();
DeleteIndexRequest deleteIndexRequest=new DeleteIndexRequest("qy158");
AcknowledgedResponse delete = indices.delete(deleteIndexRequest, RequestOptions.DEFAULT);
System.out.println("是否删除:"+delete.isAcknowledged());
}
//添加文档
@Test
public void testSaveDoc() throws IOException {
IndexRequest indexRequest=new IndexRequest("qy158-index");
indexRequest.id("1");
User user=new User("张三",22,"男","河南");
indexRequest.source(JSON.toJSONString(user), XContentType.JSON);
IndexResponse indexResponse = client.index(indexRequest, RequestOptions.DEFAULT);
System.out.println("结果:"+indexResponse.getResult());
}
//根据id查询文档内容
@Test
public void testGet()throws IOException {
GetRequest getRequest=new GetRequest("qy158-index","1");
GetResponse getResponse = client.get(getRequest, RequestOptions.DEFAULT);
Map<String, Object> map = getResponse.getSourceAsMap();
System.out.println(map);
System.out.println(map.get("name"));
}
//删除文档
@Test
public void testDelete()throws IOException{
DeleteRequest deleteRequest=new DeleteRequest("qy158-index","1");
DeleteResponse deleteResponse = client.delete(deleteRequest, RequestOptions.DEFAULT);
System.out.println(deleteResponse.getResult());
}
//批量添加
@Test
public void testBuck() throws Exception {
BulkRequest bulkRequest = new BulkRequest("qy158-index");
List<User> list = new ArrayList<>();
list.add(new User("张三", 18, "男", "北京"));
list.add(new User("李四", 19, "男", "天津"));
list.add(new User("王五",20 , "女", "郑州"));
for (int i = 0; i < list.size(); i++) {
IndexRequest indexRequest = new IndexRequest();
indexRequest.id(i + 1 + "");
indexRequest.source(JSON.toJSONString(list.get(i)), XContentType.JSON);
bulkRequest.add(indexRequest);
}
BulkResponse bulkResponse = client.bulk(bulkRequest, RequestOptions.DEFAULT);
}
//修改文档
@Test
public void testUpdate() throws IOException {
UpdateRequest updateRequest = new UpdateRequest("qy158-index", "1");
User user = new User("李四", 33, "女", "驻马店");
updateRequest.doc(JSON.toJSONString(user), XContentType.JSON);
UpdateResponse update = client.update(updateRequest, RequestOptions.DEFAULT);
System.out.println(update.getResult());
}
//高级搜索
@Test
public void testHightSearch()throws Exception{
//搜索的请求对象
SearchRequest searchRequest=new SearchRequest("qy158-index");
//构建一个条件类对象.
SearchSourceBuilder searchSourceBuilder=new SearchSourceBuilder();
//match匹配
MatchQueryBuilder matchQueryBuilder = QueryBuilders.matchQuery("name", "刘");
searchSourceBuilder.query(matchQueryBuilder);
//排序
searchSourceBuilder.sort("age", SortOrder.DESC);
//分页
searchSourceBuilder.from(0);
searchSourceBuilder.size(3);
//高亮
HighlightBuilder highlightBuilder=new HighlightBuilder();
highlightBuilder.field("name");
highlightBuilder.preTags("<font color='red'>");
highlightBuilder.postTags("</font>");
searchSourceBuilder.highlighter(highlightBuilder);
//把条件对象封装到哦searchRequest对象中。
searchRequest.source(searchSourceBuilder);
SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
SearchHits hits = searchResponse.getHits();
SearchHit[] hits1 = hits.getHits();
for(SearchHit hit:hits1){
Map<String, Object> sourceAsMap = hit.getSourceAsMap();
Map<String, HighlightField> highlightFields = hit.getHighlightFields();
sourceAsMap.put("name",highlightFields.get("name").getFragments()[0]);
System.out.println(sourceAsMap);
}
}
}