springboot-elasticsearch
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
/**
* 9200rest端口,tcp9300端口
*/
@Configuration
public class RestClientConfig extends AbstractElasticsearchConfiguration {
@Bean
public RestHighLevelClient elasticsearchClient(){
final ClientConfiguration clientConfiguration = ClientConfiguration.builder()
.connectedTo("192.168.149.129:9200")
.build();
return RestClients.create(clientConfiguration).rest();
}
}
restHighLevelClient
@SpringBootTest
public class TestRestClient {
@Resource
private RestHighLevelClient restHighLevelClient; //复杂查询使用
//ElasticSearchRepository接口面向对象,提供系列crud方法
@Test
public void test() throws IOException {
DeleteRequest deleteRequest = new DeleteRequest("ems", "emp", "1");
DeleteResponse deleteResponse = restHighLevelClient.delete(deleteRequest, RequestOptions.DEFAULT);
System.out.println("delete = " + deleteResponse.status());
}
@Test
public void testAddIndex() throws IOException {
IndexRequest indexRequest = new IndexRequest("ems","emp","1");
indexRequest.source("{\"name\": \"小小黑\",\n" +
" \"age\": 59,\n" +
" \"bir\": \"2012-12-12\",\n" +
" \"content\":\"这是一个模式,框架,掩码\",\n" +
" \"address\":\"上海\"}", XContentType.JSON);
IndexResponse indexResponse = restHighLevelClient.index(indexRequest, RequestOptions.DEFAULT);
System.out.println("indexResponse = " + indexResponse.status());
}
@Test
public void testQuery() throws IOException {
SearchRequest searchRequest = new SearchRequest("ems");
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.query(QueryBuilders.matchAllQuery())//执行条件
.from(0)
.size(20)
.postFilter(QueryBuilders.matchAllQuery())
.sort("age", SortOrder.DESC)
.highlighter(new HighlightBuilder().field("*").requireFieldMatch(false));
//创建搜素请求
searchRequest.types("emp").source(searchSourceBuilder);
SearchResponse search = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
SearchHit[] hits = search.getHits().getHits();
for (SearchHit hit : hits) {
System.out.println("hit = " + hit);
}
}
}
ElasticSearchRepository面向对象
entity.emp
@Data
/**
* 用在类上,将emp对象映射成es文档
* indexName :索引名 要求es服务器中不能存在此索引名
* type : 当前索引下创建类型
*
*/
@Document(indexName = "ems",type = "emp")
public class Emp {
@Id //将对象中的id属性与文档中_id一一对应
private String id;
//用在属性上代表mapping上的一个字段,type指定字段类型
@Field(type = FieldType.Text,analyzer = "ik_max_word")
private String name;
@Field(type = FieldType.Integer)
private Integer age;
@Field(type = FieldType.Date)
private Date bir;
@Field(type = FieldType.Text,analyzer = "ik_max_word")
private String content;
@Field(type = FieldType.Text,analyzer = "ik_max_word")
private String address;
}
@SpringBootTest
public class TestEmpRepository {
@Autowired
private EmpRepository empRepository;
//save保存:更新一条文档,id相同更新,不更新部分必须与原始文档相同
@Test
public void testSave(){
Emp a = new Emp();
a.setId(UUID.randomUUID().toString());
a.setName("张三");
a.setBir(new Date());
a.setAge(25);
a.setAddress("武当山学院");
a.setContent("武侠大师,一生创建多种武功,如太极,武当剑法");
empRepository.save(a);
}
@Test
public void testDelete(){
empRepository.deleteById("175e1ca8-26ca-4e0a-9476-c40e7630fd49");
}
//删除所有文档
@Test
public void testDeleteAll(){
empRepository.deleteAll();
}
//检索一条记录
@Test
public void testFindOne(){
Optional<Emp> optional = empRepository.findById("fa71e070-58b5-400c-bc1f-e93add9b11fe");
System.out.println("optional = " + optional.get());
}
//查询所有,排序
@Test
public void testFindAll(){
Iterable<Emp> empRepositoryAll = empRepository.findAll(Sort.by(Sort.Order.desc("age")));
empRepositoryAll.forEach(emp-> System.out.println("emp = " + emp));
}
//分页
@Test
public void testFindPage(){
//参数0 ,当前页减1
Iterable<Emp> empRepositoryAll = empRepository.search(QueryBuilders.matchAllQuery(), PageRequest.of(0,20));
empRepositoryAll.forEach(emp-> System.out.println("emp = " + emp));
}
}