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 整合
四:Demo
文件類
服務類
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 整合
點選(此處)摺疊或開啟
-
@Configuration
-
@PropertySource("classpath:context-datasource.properties")
-
public class ElasticSearchElConfig {
-
@Value("${el.cluster.name}")
-
private String elClusterName;
-
@Value("${el.cluster.node1.url}")
-
private String elClusterNode1Url;
-
@Value("${el.cluster.node1.port}")
-
private Integer elClusterNode2Port;
-
-
@Bean(name = "elasticSearchClient")
-
public Client elasticSearchClient() {
-
Map<String, Object> settimgMap = new HashMap<String, Object>();
-
settimgMap.put("cluster.name", elClusterName);
-
-
Settings settings = Settings.settingsBuilder().put(settimgMap).build();
-
-
TransportClient client = TransportClient.builder().settings(settings).build()
-
.addTransportAddress(new InetSocketTransportAddress(new InetSocketAddress(elClusterNode1Url, elClusterNode2Port)));
-
return client;
-
-
}
-
-
@Bean(name = "elasticTemplate")
-
public ElasticsearchTemplate elasticTemplate(Client elasticSearchClient) {
-
return new ElasticsearchTemplate(elasticSearchClient);
-
}
-
-
@Autowired
-
private Environment environment;
-
-
@Bean
-
public static PropertySourcesPlaceholderConfigurer propertyConfigure() {
-
return new PropertySourcesPlaceholderConfigurer();
-
}
- }
四:Demo
文件類
點選(此處)摺疊或開啟
-
@Document(indexName="gmap_system_log_index",type="gmap_system_log")
-
public class Logs extends ValueObject{
-
-
/**
-
*
-
*/
-
private static final long serialVersionUID = 1L;
-
-
@Field(type=FieldType.Integer,index=FieldIndex.not_analyzed,store=true)
-
private Integer userId;
-
@Field(type=FieldType.String,index=FieldIndex.not_analyzed,store=true)
-
private String system;
-
@Field(type=FieldType.String,index=FieldIndex.not_analyzed,store=true)
-
private String url;
-
@Field(type=FieldType.String,index=FieldIndex.analyzed,store=true)
-
private String content;
-
/**
-
* @return the userId
-
*/
-
public Integer getUserId() {
-
return userId;
-
}
-
/**
-
* @param userId the userId to set
-
*/
-
public void setUserId(Integer userId) {
-
this.userId = userId;
-
}
-
/**
-
* @return the system
-
*/
-
public String getSystem() {
-
return system;
-
}
-
/**
-
* @param system the system to set
-
*/
-
public void setSystem(String system) {
-
this.system = system;
-
}
-
/**
-
* @return the url
-
*/
-
public String getUrl() {
-
return url;
-
}
-
/**
-
* @param url the url to set
-
*/
-
public void setUrl(String url) {
-
this.url = url;
-
}
-
/**
-
* @return the content
-
*/
-
public String getContent() {
-
return content;
-
}
-
/**
-
* @param content the content to set
-
*/
-
public void setContent(String content) {
-
this.content = content;
-
}
-
-
- }
服務類
點選(此處)摺疊或開啟
-
import java.util.ArrayList;
-
import java.util.List;
-
-
import org.springframework.beans.factory.annotation.Autowired;
-
import org.springframework.data.elasticsearch.core.ElasticsearchTemplate;
-
import org.springframework.data.elasticsearch.core.query.IndexQuery;
-
import org.springframework.data.elasticsearch.core.query.IndexQueryBuilder;
-
import org.springframework.stereotype.Component;
-
-
/**
-
* TODO:
-
*
-
* @author gengchong
-
* @date 2017年4月28日 下午4:24:01
-
*/
-
@Component("elasticSearchDemo")
-
public class ElasticSearchDemo {
-
-
@Autowired
-
private ElasticsearchTemplate elasticTemplate;
-
-
/**
-
* 建立索引
-
*/
-
public void createGmapLogsIndex() {
-
System.out.println(elasticTemplate.createIndex(Logs.class));
-
}
-
-
/**
-
* 批次新增文件
-
*
-
* @param logs
-
*/
-
public void createGmapLogs(List<Logs> logs) {
-
List<IndexQuery> queries = new ArrayList<>();
-
for (Logs log : logs) {
-
IndexQuery indexQuery = new IndexQueryBuilder().withObject(log).build();
-
queries.add(indexQuery);
-
}
-
-
elasticTemplate.bulkIndex(queries);
-
}
-
-
/**
-
* 新增文件
-
*
-
* @param log
-
*/
-
public void createGmapLog(Logs log) {
-
List<Logs> logs = new ArrayList<>();
-
logs.add(log);
-
createGmapLogs(logs);
-
}
-
- }
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28624388/viewspace-2138193/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Spring Boot整合Spring BatchSpring BootBAT
- Spring Boot整合Spring SecuritySpring Boot
- Spring Boot整合Spring AopSpring Boot
- Spring 整合 MyBatisSpringMyBatis
- mybatis整合springMyBatisSpring
- ActiveMq整合SpringMQSpring
- Spring整合MyBatisSpringMyBatis
- Spring整合JUnitSpring
- Spring整合WebSocketSpringWeb
- Spring Cloud 整合SpringCloud
- MyBatis(九) 整合Spring、整合SpringMVCMyBatisSpringMVC
- Spring Boot:整合Spring Data JPASpring Boot
- spring:spring與mybatis的整合SpringMyBatis
- spring-boot+spring-session整合SpringbootSession
- spring+redis的整合,使用spring-data-redis來整合SpringRedis
- Unit08: Spring與MyBatis整合 、 Spring整合MyBatis應用SpringMyBatis
- Spring Boot整合rabbitmqSpring BootMQ
- Spring框架|整合JdbcTemplateSpring框架JDBC
- Spring Boot 整合 rabbitmqSpring BootMQ
- Spring Boot 整合 elasticsearchSpring BootElasticsearch
- Spring Boot 整合 dockerSpring BootDocker
- Spring Boot 整合 elkSpring Boot
- Spring Boot 整合 ApolloSpring Boot
- Spring Boot整合RedisSpring BootRedis
- Spring Boot 整合redisSpring BootRedis
- Spring Boot 整合 MyBatisSpring BootMyBatis
- Spring與ActiveMQ整合SpringMQ
- Spring整合Mybatis plusSpringMyBatis
- Spring Boot整合SocketSpring Boot
- spring與redis整合SpringRedis
- Spring 整合 HibernateSpring
- Mybatis與Spring整合MyBatisSpring
- spring boot整合jooqSpring Boot
- 整合RabbitMQ&SpringMQSpring
- spring-quartz整合Springquartz
- Spring整合其他框架Spring框架
- Spring 持久層整合Spring
- spring cloud 整合 nacosSpringCloud