赞
踩
Elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。
我们建立一个网站或应用程序,并要添加搜索功能,但是想要完成搜索工作的创建是非常困难的。我们希望搜索解决方案要运行速度快,我们希望能有一个零配置和一个完全免费的搜索模式,我们希望能够简单地使用JSON通过HTTP来索引数据,我们希望我们的搜索服务器始终可用,我们希望能够从一台开始并扩展到数百台,我们要实时搜索,我们要简单的多租户,我们希望建立一个云的解决方案。因此我们利用Elasticsearch来解决所有这些问题及可能出现的更多其它问题。
安装和启动Elasticsearch请查看以下博客。
Windows Elasticsearch使用教程(下载、允许Elasticsearch跨域访问、启动)
- <!-- ElasticSearch6缓存数据库-->
- <dependency>
- <groupId>org.springframework.data</groupId>
- <artifactId>spring-data-elasticsearch</artifactId>
- <version>3.1.1.RELEASE</version>
- <scope>compile</scope>
- </dependency>
- #elasticsearch缓存数据库ip地址
- elasticsearch.ip=127.0.0.1
- #elasticsearch缓存数据库端口
- elasticsearch.port=9300
- #elasticsearch缓存数据库连接池大小
- elasticsearch.pool=5
- #elasticsearch缓存数据库集群名称
- elasticsearch.cluster.name=elasticsearch
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;
- }
- }
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;
- }
创建一个名称为user的索引。具体创建步骤请参数以下博客。
ElasticSearch-Head操作Elasticsearch进行增加、更新、查询、删除数据
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);
- }
调试代码。
- 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);
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。