文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Spring 4+ElasticSearch如何集成

2023-06-04 12:58

关注

小编给大家分享一下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<String, Object> settimgMap = new HashMap<String, Object>();

  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.     private static final long serialVersionUID = 1L;

  5.     

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

  7.     private Integer userId;

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

  9.     private String system;

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

  11.     private String url;

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

  13.     private String content;

  14.     

  15.     public Integer getUserId() {

  16.         return userId;

  17.     }

  18.     

  19.     public void setUserId(Integer userId) {

  20.         this.userId = userId;

  21.     }

  22.     

  23.     public String getSystem() {

  24.         return system;

  25.     }

  26.     

  27.     public void setSystem(String system) {

  28.         this.system = system;

  29.     }

  30.     

  31.     public String getUrl() {

  32.         return url;

  33.     }

  34.     

  35.     public void setUrl(String url) {

  36.         this.url = url;

  37.     }

  38.     

  39.     public String getContent() {

  40.         return content;

  41.     }

  42.     

  43.     public void setContent(String content) {

  44.         this.content = content;

  45.     }

  46.     

  47.     

  48. }


服务类


点击(此处)折叠或打开

  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. @Component("elasticSearchDemo")

  9. public class ElasticSearchDemo {

  10.     @Autowired

  11.     private ElasticsearchTemplate elasticTemplate;

  12.     

  13.     public void createGmapLogsIndex() {

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

  15.     }

  16.     

  17.     public void createGmapLogs(List<Logs> logs) {

  18.         List<IndexQuery> queries = new ArrayList<>();

  19.         for (Logs log : logs) {

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

  21.             queries.add(indexQuery);

  22.         }

  23.         elasticTemplate.bulkIndex(queries);

  24.     }

  25.     

  26.     public void createGmapLog(Logs log) {

  27.         List<Logs> logs = new ArrayList<>();

  28.         logs.add(log);

  29.         createGmapLogs(logs);

  30.     }

  31. }

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

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯