使用的ES 6.2.2 springboot 2.2.2
1首先在maven中添加引用
<dependency> <groupId>org.elasticsearch</groupId> <artifactId>elasticsearch</artifactId> </dependency> <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>
2 然后添加配置
以下方法官方已经不推荐了.
#spring.data.elasticsearch.cluster-nodes=127.0.0.1:9300
#spring.data.elasticsearch.cluster-name=elasticsearch
所以我们要在配置类里面添加配置如下:
package com.ext.texs.conf; import org.elasticsearch.client.Client; import org.elasticsearch.client.transport.TransportClient; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.transport.TransportAddress; import org.elasticsearch.transport.client.PreBuiltTransportClient; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.convert.support.DefaultConversionService; import org.springframework.data.elasticsearch.config.ElasticsearchConfigurationSupport; import org.springframework.data.elasticsearch.core.ElasticsearchEntityMapper; import org.springframework.data.elasticsearch.core.ElasticsearchTemplate; import org.springframework.data.elasticsearch.core.EntityMapper; import java.net.InetAddress; import java.net.UnknownHostException; /** * ES 配置文件 */ @Configuration public class Esconfig extends ElasticsearchConfigurationSupport { @Bean public Client elasticsearchClient() throws UnknownHostException { Settings settings = Settings.builder().put("cluster.name", "elasticsearch").build(); TransportClient client = new PreBuiltTransportClient(settings); client.addTransportAddress(new TransportAddress(InetAddress.getByName("127.0.0.1"), 9300)); return client; } @Bean(name = "elasticsearchTemplate") public ElasticsearchTemplate elasticsearchTemplate() throws UnknownHostException { return new ElasticsearchTemplate(elasticsearchClient(), entityMapper()); } // use the ElasticsearchEntityMapper @Bean @Override public EntityMapper entityMapper() { ElasticsearchEntityMapper entityMapper = new ElasticsearchEntityMapper(elasticsearchMappingContext(), new DefaultConversionService()); entityMapper.setConversions(elasticsearchCustomConversions()); return entityMapper; } } 第三 实体类如下:
package com.ext.texs.entity; import org.springframework.data.annotation.Id; import org.springframework.data.elasticsearch.annotations.Document; //indexName索引库名,个人建议以项目名称命名 //type类型,个人建议以实体类名称命名 @Document(indexName = "loginindex",type = "doc") public class LoginEs { //代表唯一标识 @Id private String id; private String name; private String pwd; private String age; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPwd() { return pwd; } public void setPwd(String pwd) { this.pwd = pwd; } public String getAge() { return age; } public void setAge(String age) { this.age = age; } }
第四 建立接口集成 ElasticsearchRepository 接口
package com.ext.texs.conf; import com.ext.texs.entity.LoginEs; import org.springframework.data.elasticsearch.repository.ElasticsearchRepository; public interface LogRepository extends ElasticsearchRepository<LoginEs,String> { }
第五 实现方法如下
package com.ext.texs.controller; import com.ext.texs.conf.LogRepository; import com.ext.texs.entity.LoginEs; import org.elasticsearch.index.query.QueryBuilder; import org.elasticsearch.index.query.QueryBuilders; import org.elasticsearch.index.query.QueryStringQueryBuilder; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.elasticsearch.core.query.SearchQuery; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Optional; @RestController public class EsController { @Autowired LogRepository pository; @RequestMapping("/one") public void findOne(){ Optional<LoginEs> mod = pository.findById("1"); System.out.println(mod.get()); } @RequestMapping("/all") public void findall(){ //全文检索关键字 String queryString="刘大"; QueryStringQueryBuilder builder = new QueryStringQueryBuilder(queryString); Iterable<LoginEs> mod = pository.search(builder); //Iterable<T> Iterator iterator =mod.iterator(); while(iterator.hasNext()){ Object str = (Object) iterator.next(); LoginEs es = (LoginEs)str; System.out.println(es.getId()+es.getName()+es.getAge()+es.getPwd()); } } @RequestMapping("/a") public Iterable<LoginEs> search(){ QueryBuilder builder = QueryBuilders.boolQuery() // .must(QueryBuilders.matchQuery("userName.keyword", "历张")) 搜索不到 .must(QueryBuilders.matchQuery("name", "刘")) // 可以搜索 .must(QueryBuilders.matchQuery("id", "20")); return pository.search(builder) ; } @RequestMapping("/save") public void save() { LoginEs logEntity = new LoginEs(); logEntity.setAge("11"); logEntity.setId("100"); logEntity.setPwd("123456"); LoginEs index = pository.save(logEntity); System.out.println(index); } @RequestMapping("/update") public void update() { LoginEs logEntity = new LoginEs(); logEntity.setAge("11"); logEntity.setId("101"); logEntity.setPwd("123456"); LoginEs index = pository.save(logEntity); System.out.println(index); } } 总体代码到这来就结束,可以得到预期的结果,在此之前请大家安装好 ELK ,并可以通过logstash 往ES里面加好数据。