6.Elasticsearch,分布式搜索引擎


项目源码可以在 https://gitee.com/ShayneC/community获取

Elasticsearch,分布式搜索引擎

1. Elasticsearch入门

Elasticsearch简介

  • 一个分布式的、Restful风格(请求标准的描述)的搜索引擎。
    • 支持对各种类型的数据的检索。
    • 搜索速度快,可以提供实时的搜索服务。
    • 便于水平扩展,每秒可以处理PB级海量数据。

Elasticsearch术语

  • 索引(对应数据库)、类型(对应表)、文档(表里一行)、字段(一列)。 最新的版本类型被废弃。
  • 集群(服务器组合在一起)、节点(集群中每台服务器)、分片(对索引的划分)、副本(分片的备份)。

通过ES搜索的数据必须要在ES中转存一份,某种角度来说它是一个数据库。

Elasticsearch使用

  • 安装、修改配置文件

    • elasticsearch.yml文件,修改cluster.name,path.data,path.logs
    • 配置环境变量
  • 安装中文分词插件(ES仅支持中文分词)

    • ik插件安装到plugins文件夹下
  • 安装postman(提交html数据给ES)模拟web客户端

  • 启动ES:打开bin/elasticsearch.bat

    • 查看集群健康状态:curl -X GET “localhost:9200/_cat/health?v”
    • 查看节点:curl -X GET “localhost:9200/_cat/nodes?v”
    • 查看索引:curl -X GET “localhost:9200/_cat/indices?v”
    • 创建索引:curl -X PUT “localhost:9200/test”
    • 删除索引:curl -X DELETE “localhost:9200/test”
  • 使用postman查询

    • 提交数据,PUT localhost:9200/test/_doc/1选择Body,raw,JSON

    • 搜索,GET localhost:9200/test/_search?q=title(/content):xxx

    • 搜索时ES对关键词进行了分词

    • 通过请求体构造复杂搜索条件

2. Spring整合Elasticsearch

  • 引入依赖
    • spring-boot-starter-data-elasticsearch
  • 配置Elasticsearch
    • cluster-name、cluster-nodes(集群的名字,节点)
    • Redis和Es底层都用到了Netty,有启动冲突。解决:在CommunityApplication类加入初始化方法进行配置。
  • Spring Data Elasticsearch(调用API)
    • ElasticsearchTemplate(集成了Es的CRUD方法)
    • ElasticsearchRepository(接口,底层为ElasticsearchTemplate,用起来更方便)

我是使用的elasticsearch是7.15.2版本与6.x相差较大,但使用起来更容易,对于springboot集成elasticsearch只需要添加一个配置类就可以了,并舍弃了6.x版本配置cluster-name、cluster-nodes的功能。

在src/main/java/com/nowcoder/community/config包下新建ElasticSearchClientConfig类,即可连接elasticsearch服务器

@Configuration
public class ElasticSearchClientConfig {
   

    @Bean
    public RestHighLevelClient restHighLevelClien() {
   
        RestHighLevelClient client = new RestHighLevelClient(
                RestClient.builder(
                        new HttpHost("127.0.0.1", 9200, "http")));
        return client;
    }
}

在CommunityApplication主启动类中添加init方法解决Netty的冲突问题

@PostConstruct
public void init() {
   
    // 解决netty启动冲突的问题
    // Netty4Utils.setAvailableProcessors
    System.setProperty("es.set.netty.runtime.available.processors", "false");
}

在src/main/java/com/nowcoder/community/dao下新建elasticsearch包,并创建DiscussPostRepository接口

@Repository
public interface DiscussPostRepository extends ElasticsearchRepository<DiscussPost, Integer> {
   
}

最后创建ElasticsearchTests测试类,测试elasticsearch的基本功能

@SpringBootTest
@ContextConfiguration(classes = CommunityApplication.class)
public class ElasticsearchTests {
   

    @Autowired
    private DiscussPostMapper discussPostMapper;

    @Autowired
    private DiscussPostRepository discussPostRepository;

    @Autowired
    private ElasticsearchRestTemplate elasticsearchRestTemplate;

    @Test
    public void testInsert() {
   
        discussPostRepository.save(discussPostMapper.selectDiscussPostById(241));
        discussPostRepository.save(discussPostMapper.selectDiscussPostById(242));
        discussPostRepository.save(discussPostMapper.selectDiscussPostById(243));
    }

    @Test
    public void testInsertList() {
   
        discussPostRepository.saveAll(discussPostMapper.selectDiscussPosts(101, 0, 100));
        discussPostRepository.saveAll(discussPostMapper.selectDiscussPosts(102, 0, 100));
        discussPostRepository.saveAll(discussPostMapper.selectDiscussPosts(103, 0, 100));
        discussPostRepository.saveAll(discussPostMapper.selectDiscussPosts(111, 0, 100));
        discussPostRepository.saveAll(discussPostMapper.selectDiscussPosts(112, 0, 100));
        discussPostRepository.saveAll(discussPostMapper.selectDiscussPosts(131, 0, 100));
        discussPostRepository.saveAll(discussPostMapper.selectDiscussPosts(132, 0, 
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值