1 Elasticsearch
Elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。
我们建立一个网站或应用程序,并要添加搜索功能,但是想要完成搜索工作的创建是非常困难的。我们希望搜索解决方案要运行速度快,我们希望能有一个零配置和一个完全免费的搜索模式,我们希望能够简单地使用JSON通过HTTP来索引数据,我们希望我们的搜索服务器始终可用,我们希望能够从一台开始并扩展到数百台,我们要实时搜索,我们要简单的多租户,我们希望建立一个云的解决方案。因此我们利用Elasticsearch来解决所有这些问题及可能出现的更多其它问题。
2 启动Elasticsearch
安装和启动Elasticsearch请查看以下博客。
Windows Elasticsearch使用教程(下载、允许Elasticsearch跨域访问、启动)
3 Maven依赖
<!-- ElasticSearch6缓存数据库-->
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-elasticsearch</artifactId>
<version>3.1.1.RELEASE</version>
<scope>compile</scope>
</dependency>
4 Spring Boot配置
#elasticsearch缓存数据库ip地址
elasticsearch.ip=127.0.0.1
#elasticsearch缓存数据库端口
elasticsearch.port=9300
#elasticsearch缓存数据库连接池大小
elasticsearch.pool=5
#elasticsearch缓存数据库集群名称
elasticsearch.cluster.name=elasticsearch
5 ElasticsearchConfig
Elasticsearch配置类。
package com.config;
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.beans.factory.annotation.Value;
import org.springframework.context.annotation.*;
import org.springframework.data.elasticsearch.core.ElasticsearchTemplate;
import java.net.InetAddress;
/**
* Elasticsearch配置类
*/
@Configuration
public class ElasticsearchConfig {
/**
* ip地址
*/
@Value("${elasticsearch.ip}")
private String hostName;
/**
* 端口
*/
@Value("${elasticsearch.port}")
private String port;
/**
* 集群名称
*/
@Value("${elasticsearch.cluster.name}")
private String clusterName;
/**
* 连接池大小
*/
@Value("${elasticsearch.pool}")
private String poolSize;
/**
* 客户端资源池
*
* @return
*/
@Bean(name = "transportClient")
public TransportClient transportClient() {
TransportClient transportClient = null;
try {
// 配置信息
Settings esSetting = Settings.builder()
//集群名字
.put("cluster.name", clusterName)
//增加嗅探机制,找到ES集群
.put("client.transport.sniff", true)
//增加线程池个数,暂时设为5
.put("thread_pool.search.size", Integer.parseInt(poolSize))
.build();
//配置信息Settings自定义
transportClient = new PreBuiltTransportClient(esSetting);
TransportAddress transportAddress = new TransportAddress(InetAddress.getByName(hostName), Integer.valueOf(port));
transportClient.addTransportAddresses(transportAddress);
} catch (Exception e) {
e.printStackTrace();
}
return transportClient;
}
/**
* spring对java api的封装
*
* @param client 客户端资源池
* @return
*/
@Bean
ElasticsearchTemplate elasticsearchTemplate(TransportClient client) {
ElasticsearchTemplate elasticsearchTemplate = new ElasticsearchTemplate(client);
return elasticsearchTemplate;
}
}
6 UserDto
Elasticsearch实体类(用户)。
package com.dto;
import lombok.Data;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.*;
/**
* Elasticsearch实体类(用户)
*/
@Document(indexName = "user",type = "userdto")
@Data
public class UserDto {
@Id
private String username;
@Field(type = FieldType.Text)
private String password;
}
7 新建索引
创建一个名称为user的索引。具体创建步骤请参数以下博客。
ElasticSearch-Head操作Elasticsearch进行增加、更新、查询、删除数据
8 UserRepository
Elasticsearch持久层类(用户)。
package com.dao;
import com.dto.UserDto;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
import org.springframework.stereotype.*;
/**
* Elasticsearch持久层类(用户)
*/
@Repository
public interface UserRepository extends ElasticsearchRepository<UserDto,String> {
/**
* 查询用户信息
* @param username
* @return
*/
UserDto getUserDtoByUsername(String username);
}
9 ElasticsearchController
调试代码。
package com.controller;
import com.dao.UserRepository;
import com.dto.UserDto;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/elasticsearch")
public class ElasticsearchController {
@Autowired
private UserRepository userRepository;
/**
* 插入
*
* @return
*/
@PostMapping("/insert")
public UserDto insert(UserDto userDto) {
return userRepository.save(userDto);
}
/**
* 根据用户名获取用户信息
*
* @return
*/
@GetMapping("/query")
public UserDto query(String username) {
return userRepository.getUserDtoByUsername(username);
}
/**
* 更新
*
* @return
*/
@PostMapping("/update")
public UserDto update(UserDto userDto) {
return userRepository.save(userDto);
}
/**
* 删除
*
* @return
*/
@DeleteMapping("/delete")
public void delete(UserDto userDto){
userRepository.delete(userDto);
}
}
10 调试结果
10.1 新增数据
10.2 查询数据
10.3 更新数据
10.4 删除数据