1.依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
二.配置
elasticsearch:
rest:
host: x.x.x.x
port: 9200
三.配置文件
@Configuration
@EnableElasticsearchRepositories(basePackages = "com.x.x.x.repository")
public class ElasticsearchConfig {
@Value("${spring.elasticsearch.rest.host}")
private String host;
@Value("${spring.elasticsearch.rest.port}")
private int port;
@Bean
public RestHighLevelClient elasticsearchClient() {
RestClientBuilder builder = RestClient.builder(
new HttpHost(host, port, "http")
);
return new RestHighLevelClient(builder);
}
@Bean
public ElasticsearchOperations elasticsearchTemplate() {
return new ElasticsearchRestTemplate(elasticsearchClient());
}
}
四.Repository 用来操控Es数据库
它的package 也就是第三步中的 basePackages
@Repository
public interface MyElasticsearchRepository extends ElasticsearchRepository<OrderEs, Long> {
}
五.在es中创建一个索引
我是使用es-head连接es然后创建了一个索引
六.在代码中创建实体类
@Document(indexName = "order_index")
@Data
public class OrderEs {
/**
* id
*/
@Id
private Long id;
/**
* 删除标志
*/
private Integer delFlag;
/**
* 订单编号
*/
es 中能分词的字段,这个字段数据类型必须是 text!keyword 不分词!
@Field(type = FieldType.Keyword)
private String orderNo;
/**
* 订单类型(入库,出库)
*/
private Integer type;
/**
* 订单买家
*/
@Field(type = FieldType.Keyword)
private String orderBuyer;
我这里搜到的 如果想使用分此功能必须是Text 但是我是用keyword也可以分词查询 这个我研究好后进行完善
七.使用例子
@SpringBootTest
public class Test1 {
@Autowired
private MyElasticsearchRepository myElasticsearchRepository;
@Test
public void test() {
OrderEs orderEs = new OrderEs();
orderEs.setId(131231L);
orderEs.setOrderNo("12312321");
orderEs.setOrderBuyer("JAVA核心技术");
myElasticsearchRepository.save(orderEs);
Optional<OrderEs> byId = myElasticsearchRepository.findById(131231L);
}
@Test
public void test2(){
Optional<OrderEs> byId = myElasticsearchRepository.findById(131231L);
System.out.println(byId.toString());
}
@Test
public void test3(){
List<OrderEs> a = myElasticsearchRepository.findByOrderBuyer("java技术");
for(OrderEs orderEs: a){
System.out.println(a.toString());
}
}
}
八.根据参数查询
如果不使用ID查询 比如想使用OrderBuyer来查询 那么我们可以在MyElasticsearchRepository添加对应的方法即可 如果是多条件可以用ADN 拼接
List<OrderEs> findByOrderBuyer(String orderBuyer);