千家信息网

Spring 4+ElasticSearch如何集成

发表于:2025-11-12 作者:千家信息网编辑
千家信息网最后更新 2025年11月12日,小编给大家分享一下Spring 4+ElasticSearch如何集成,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一:
千家信息网最后更新 2025年11月12日Spring 4+ElasticSearch如何集成

小编给大家分享一下Spring 4+ElasticSearch如何集成,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

一: ElasticSearch 基本概念

INDEX:这是ES存储数据的地方,类似于关系数据库的DATABASE。


Document TYPE:嗯,类似关系数据库的表,主要功能是将完全不同SCHEMA(这个概念以后会讲到,不急)的数据分开,一个INDEX里面可以有若干个Document TYPE。


Document:好吧,这个类似关系数据库的一行,在同一个Document TYPE下面,每一Document都有一个唯一的ID作为区分;


Filed:类似关系数据库的某一列,这是ES数据存储的最小单位。


Cluster和Node:ES可以以单点或者集群方式运行,以一个整体对外提供search服务的所有节点组成cluster,组成这个cluster的各个节点叫做node。


shard:通常叫分片,这是ES提供分布式搜索的基础,其含义为将一个完整的INDEX分成若干部分存储在相同或不同的节点上,这些组成INDEX的部分就叫做shard。


Replica:和REPLICATION通常指的都是一回事,即INDEX的冗余备份,可以用于防止数据丢失,或者用来做负载分担。


二: ElasticSearch TransportClient和NodeClient

如果你使用Java,ElasticSearch 提供Transport CLIENT和Node CLIENT两种连接方式。transport CLIENT充当ES集群和你的应用直接的通信层,它知道API,并且能够在节点间自动轮循。


Node CLIENT,事实上是集群中的一个节点(但是不存储数据,并且不能作为主节点),由于它是一个节点,它知道整个集群的状态(全部节点都在哪,哪些分片在哪些节点上等等),这意味着它执行API时可以少用一个网络跳跃。


但需要完整的Node节点参数配置。


两种CLIENT的使用场景:


1.如果你想让你的应用和集群解耦,transport CLIENT是一个理想的选择。例如,如果你的集群快速创建和销毁连接,那么transport CLIENT比node CLIENT轻很多,因为它不是集群的一部分。


同样,如果你需要创建上千个连接,但是你不希望有上千个node CLIENT加入你的集群,transport CLIENT将是一个更好的选择。


2.在另一方面,如果你只需要几个长连接的,能持久的连接到集群,node CLIENT会更高效一点,因为它知道集群的结构,但是要注意防火墙影响相关通信的问题。


三:与Spring 集成


  1. @Configuration

  2. @PropertySource("classpath:context-datasource.properties")

  3. public class ElasticSearchElConfig {

  4. @Value("${el.cluster.name}")

  5. private String elClusterName;

  6. @Value("${el.cluster.node1.url}")

  7. private String elClusterNode1Url;

  8. @Value("${el.cluster.node1.port}")

  9. private Integer elClusterNode2Port;


  10. @Bean(name = "elasticSearchClient")

  11. public Client elasticSearchClient() {

  12. Map settimgMap = new HashMap();

  13. settimgMap.put("cluster.name", elClusterName);


  14. Settings settings = Settings.settingsBuilder().put(settimgMap).build();


  15. TransportClient client = TransportClient.builder().settings(settings).build()

  16. .addTransportAddress(new InetSocketTransportAddress(new InetSocketAddress(elClusterNode1Url, elClusterNode2Port)));

  17. return client;


  18. }


  19. @Bean(name = "elasticTemplate")

  20. public ElasticsearchTemplate elasticTemplate(Client elasticSearchClient) {

  21. return new ElasticsearchTemplate(elasticSearchClient);

  22. }


  23. @Autowired

  24. private Environment environment;


  25. @Bean

  26. public static PropertySourcesPlaceholderConfigurer propertyConfigure() {

  27. return new PropertySourcesPlaceholderConfigurer();

  28. }

  29. }


四:Demo

文档类


点击(此处)折叠或打开

  1. @Document(indexName="gmap_system_log_index",type="gmap_system_log")

  2. public class Logs extends ValueObject{


  3. /**

  4. *

  5. */

  6. private static final long serialVersionUID = 1L;


  7. @Field(type=FieldType.Integer,index=FieldIndex.not_analyzed,store=true)

  8. private Integer userId;

  9. @Field(type=FieldType.String,index=FieldIndex.not_analyzed,store=true)

  10. private String system;

  11. @Field(type=FieldType.String,index=FieldIndex.not_analyzed,store=true)

  12. private String url;

  13. @Field(type=FieldType.String,index=FieldIndex.analyzed,store=true)

  14. private String content;

  15. /**

  16. * @return the userId

  17. */

  18. public Integer getUserId() {

  19. return userId;

  20. }

  21. /**

  22. * @param userId the userId to set

  23. */

  24. public void setUserId(Integer userId) {

  25. this.userId = userId;

  26. }

  27. /**

  28. * @return the system

  29. */

  30. public String getSystem() {

  31. return system;

  32. }

  33. /**

  34. * @param system the system to set

  35. */

  36. public void setSystem(String system) {

  37. this.system = system;

  38. }

  39. /**

  40. * @return the url

  41. */

  42. public String getUrl() {

  43. return url;

  44. }

  45. /**

  46. * @param url the url to set

  47. */

  48. public void setUrl(String url) {

  49. this.url = url;

  50. }

  51. /**

  52. * @return the content

  53. */

  54. public String getContent() {

  55. return content;

  56. }

  57. /**

  58. * @param content the content to set

  59. */

  60. public void setContent(String content) {

  61. this.content = content;

  62. }



  63. }


服务类


点击(此处)折叠或打开

  1. import java.util.ArrayList;

  2. import java.util.List;


  3. import org.springframework.beans.factory.annotation.Autowired;

  4. import org.springframework.data.elasticsearch.core.ElasticsearchTemplate;

  5. import org.springframework.data.elasticsearch.core.query.IndexQuery;

  6. import org.springframework.data.elasticsearch.core.query.IndexQueryBuilder;

  7. import org.springframework.stereotype.Component;


  8. /**

  9. * TODO:

  10. *

  11. * @author gengchong

  12. * @date 2017年4月28日 下午4:24:01

  13. */

  14. @Component("elasticSearchDemo")

  15. public class ElasticSearchDemo {


  16. @Autowired

  17. private ElasticsearchTemplate elasticTemplate;


  18. /**

  19. * 创建索引

  20. */

  21. public void createGmapLogsIndex() {

  22. System.out.println(elasticTemplate.createIndex(Logs.class));

  23. }


  24. /**

  25. * 批量添加文档

  26. *

  27. * @param logs

  28. */

  29. public void createGmapLogs(List logs) {

  30. List queries = new ArrayList<>();

  31. for (Logs log : logs) {

  32. IndexQuery indexQuery = new IndexQueryBuilder().withObject(log).build();

  33. queries.add(indexQuery);

  34. }


  35. elasticTemplate.bulkIndex(queries);

  36. }


  37. /**

  38. * 添加文档

  39. *

  40. * @param log

  41. */

  42. public void createGmapLog(Logs log) {

  43. List logs = new ArrayList<>();

  44. logs.add(log);

  45. createGmapLogs(logs);

  46. }


  47. }

以上是"Spring 4+ElasticSearch如何集成"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

节点 集群 数据 数据库 存储 文档 篇文章 这是 不同 上千 内容 方式 概念 部分 应用 服务 选择 通信 最小 相同 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 为什么客户终端无法连接服务器 万方数据库属于二次文献吗 使用计算机网络安全论文 出具网络安全报告需要哪些资质 郑州科技互联网环境怎么样 南充网络安全宣传周活动报道 无锡节能刀片服务器哪家好 php数组循环存入数据库 redid 与数据库数据不一致 丹东供暖站自动化控制软件开发 2021年网络安全人才缺口 软件开发和测试怎么选择 查数据库所有的索引 数据库设计基础第一范式 软件开发实验室网站 利用引文数据库检索下列各题 闵行区智能化软件开发品牌 网络安全公平开课 服务器风扇传感器 2022定制化软件开发行业 何为网络安全型号 手机访问数据库工具 网络安全周观后感500字 武汉交易软件开发 阐述计算机网络安全及其应用 湖北r740服务器云主机 昆山模具公司erp软件开发 北京奥拓思维软件开发公司 数据库不可以查询 软件开发是传销吗
0