赞
踩
Document可以看作表中的一条记录,Index可以看作Database数据库,而Type就是里面的Table表。
一、依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
二、在application.properties文件中添加ElasticSearch连接信息
server.port=8080
#es 配置信息
spring.main.allow-bean-definition-overriding=true
elasticsearch.host=127.0.0.1
elasticsearch.port=9300
elasticsearch.clustername=elasticsearch
elasticsearch.search.pool.size=5
启动类
@SpringBootApplication
public class SSD08Application {
public static void main(String[] args) {
SpringApplication.run(SSD08Application.class, args);
}
}
三、创建Elasticsearch配置类
@Slf4j @Configuration @EnableElasticsearchRepositories(basePackages = "com.yoodb.study.demo08.service") public class ElasticsearchConfig{ @Value("${elasticsearch.host}") private String esHost; @Value("${elasticsearch.port}") private int esPort; @Value("${elasticsearch.clustername}") private String esClusterName; @Value("${elasticsearch.search.pool.size}") private Integer threadPoolSearchSize; @Bean public Client client() throws Exception{ Settings esSettings = Settings.builder() .put("cluster.name",esClusterName) .put("client.transoprt.sniff",true) .put("thread_pool.search.size",threadPoolSearchSize) .build(); return new PreBuiltTransportClient(esSettings) .addTransoprtAddress(new TransportAddress(InetAddress.getByName(esHost), esPort)); } @Bean(name="elasticsearchTemplate") public ElasticsearchOperations elasticsearchTemplateCustom() throws Exception { ElasticsearchTemplate elasticsearchTemplate; try{ elasticsearchTemplate = new ElasticsearchTemplate(client()); return elasticsearchTemplate; }catch(Exception e){ return new ElasticsearchTemplate(client()); } } }
四、创建Article实体类
indexName:对应索引库名称
type:对应在索引库中的类型
shards:分片数量,默认分5片
replicas:副本数量,默认1份
type:字段类型,取值是枚举:FieldType
index:是否索引,布尔类型,默认是true
store:是否存储,布尔类型,默认是false
analyzer和searchAnalyzer中参数名称保持一直,ik_max_word可以改成ik_smart
ik_max_word和ik_smart的区别?
如果想要搜索出的结果尽可能全,可以使用ik_max_word参数,如果需要结果尽可能精确,可以使用ik_smart参数
Document(indexName = "blog",type = "article") public class Article { /** * 主键ID */ @Field(type = FieldType.Keyword) private String id; /** * 文章标题 */ @Field(type = FieldType.Text, analyzer = "ik_max_word",searchAnalyzer = "ik_max_word") private String title; /** * 文章内容 */ @Field(type = FieldType.Text, analyzer = "ik_max_word",searchAnalyzer = "ik_max_word") private String content; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getContent() { return content; } public void setContent(String content) { this.content = content; } }
五、继承ElasticsearchRepository接口
public interface ElasticRepository extends ElasticsearchRepository<Article, String> {
}
六、IElasticService接口以及实现类
public interface IElasticService {
public void save(Article article);
public void saveAll(List<Article> list);
public Iterator<Article> findAll();
public List<Article> findArticleByTitle(String title);
}
@Service("elasticService") public class ElasticServiceImpl implements IElasticService { @Autowired private ElasticRepository elasticRepository; @Override public void save(Article article) { elasticRepository.deleteAll(); elasticRepository.save(article); } @Override public void saveAll(List<Article> list) { elasticRepository.saveAll(list); } @Override public Iterator<Article> findAll() { return elasticRepository.findAll().iterator(); } public List<Article> findArticleByTitle(String title) { //matchQuery 对关键字分词后进行搜索 MatchQueryBuilder matchQueryBuilder = QueryBuilders.matchQuery("title", title); QueryBuilders.commonTermsQuery("title",title); Iterable<Article> search = elasticRepository.search(matchQueryBuilder); Iterator<Article> iterator = search.iterator(); List<Article> list = new ArrayList<>(); while (iterator.hasNext()){ Article next = iterator.next(); list.add(next); } return list; } }
七、控制层Controller
@Log4j2 @RestController @RequestMapping("/elastic") public class ElasticController { @Autowired private IElasticService elasticService; @GetMapping("/init") public void init(){ String title = "关注“Java精选”微信公众号"; String content = "Java精选专注程序员推送一些Java开发知识,包括基础知识、各大流行框架" + "(Mybatis、Spring、Spring Boot等)、大数据技术(Storm、Hadoop、MapReduce、Spark等)、" + "数据库(Mysql、Oracle、NoSQL等)、算法与数据结构、面试专题、面试技巧经验、职业规划以及" + "优质开源项目等。其中一部分由小编总结整理,另一部分来源于网络上优质资源,希望对大家的学习" + "和工作有所帮助。"; Article article = createArticle(title, content); elasticService.save(article); title = "关注素文宅博客"; content = "素文宅博客主要关于一些Java技术类型文章分享。"; article = createArticle(title, content); List<Article> list = new ArrayList<>(); list.add(article); elasticService.saveAll(list); } public static Article createArticle(String title,String content){ UUID uuid = UUID.randomUUID(); String id = uuid.toString(); Article article = new Article(); article.setId(id); article.setTitle(title); article.setContent(content); return article; } @GetMapping("/all") public Iterator<Article> all(){ return elasticService.findAll(); } @GetMapping("/key") public List<Article> all(String title){ return elasticService.findArticleByTitle(title); } }
运行程序
1)启动ElasticSearch服务
2)启动SpringBoot项目访问地址
初始化生成索引文件访问地址
http://localhost:8080/elastic/init
获取所有索引内容访问地址
http://localhost:8080/elastic/all
[{"id":"62e73653-4658-4d72-9b2e-e541a3ae7d53","title":"关注“Java精选”微信公众号","content":"Java精选专注程序员推送一些Java开发知识,包括基础知识、各大流行框架(Mybatis、Spring、Spring Boot等)、大数据技术(Storm、Hadoop、MapReduce、Spark等)、数据库(Mysql、Oracle、NoSQL等)、算法与数据结构、面试专题、面试技巧经验、职业规划以及优质开源项目等。其中一部分由小编总结整理,另一部分来源于网络上优质资源,希望对大家的学习和工作有所帮助。"},{"id":"1e7c2f0b-e07e-4037-a3a3-3385d8b7d2c1","title":"关注素文宅博客","content":"素文宅博客主要关于一些Java技术类型文章分享。"}]
根据搜索条件,获取索引内容访问地址
http://localhost:8080/elastic/key?title=Java%E7%B2%BE%E9%80%89
返回结果:
[{"id":"62e73653-4658-4d72-9b2e-e541a3ae7d53","title":"关注“Java精选”微信公众号","content":"Java精选专注程序员推送一些Java开发知识,包括基础知识、各大流行框架(Mybatis、Spring、Spring Boot等)、大数据技术(Storm、Hadoop、MapReduce、Spark等)、数据库(Mysql、Oracle、NoSQL等)、算法与数据结构、面试专题、面试技巧经验、职业规划以及优质开源项目等。其中一部分由小编总结整理,另一部分来源于网络上优质资源,希望对大家的学习和工作有所帮助。"}]
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。