栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

elasticSearch介绍与使用

elasticSearch介绍与使用

主要内容

首先一起了解elasticSearch,然后结合springData,看看如何使用elasticSearch。

demo

GitHub - chlInGithub/esdemohttps://github.com/chlInGithub/esdemo

介绍篇 what

全文搜索与分析引擎,可以存储、搜索、分析海量数据,速度近乎实时。

输入:document和索引

es对json形式的复杂文档进行分布式存贮。当文档存储时,会进行索引,达到近实时的全文搜索。

es采用倒排索引以支持快速的全文搜索。倒排索引首先列举文档中独特的单词,然后识别含有该单词的所有文档。

一个索引可以视为文档的优化集合,一个文档由多个field(存储数据的k-v对)组成。es对field中的所有数据进行索引,每一个被索引的field对应一个独特的优化的数据结构。例如文本field存储到反向索引,数字型和地理坐标存储到BKD树。聚合每个field的数据结构,然后返回搜索结果,这样使得es查询很快。

文档被索引时,不需要明确指定文档中各种field如何控制,即无模式。dynamic mapping开启后,es可以自动发现和添加新的field。这种行为,使得索引和探索数据变得更简单。

也可以定义dynamic mapping的规则和明确定义如何存储和索引field。价值在于:

  •     区分全文字符串field和精确值字符串
  •     特定语言文本的分析
  •     为部分匹配进行字段优化
  •     自定义的时间格式
  •     指定数据类型,如geo_point、geo_shape

出于不同目的,需要对同一个field使用不同的方式进行索引。

输出:搜索与分析

可以使用es进行文档存储和文档检索,但真正强大之处在于可以方便的使用apache lucene检索引擎库的检索套件。

es提供了搜索和数据分析能力。

  • 提供了简单的RestApi,用于管理集群、索引、查询。
  • es的聚合能力可以构建数据的复杂汇总,以便察觉指标、趋势、模型
扩展性

集群能力,可以通过添加node的方式提升能力,es自动进行数据分布式,查询所有可用node中的文档。

一个索引代表了多个物理分片shard的逻辑分组,而每个分片又是一个自包含的索引。一个索引的所有文档被放到了多个分片中,然后在集群中对分片进行分布式存储,而是是冗余存储的。

分片分为两种:主分片和复制分片。一个索引中的每个文档都属于一个主分片。复制分片是对主分片的复制。

配置

涉及3个文件

  • elasticsearch.yml
  • jvm.options
  • log4j2.properties
pipeline

在构建索引之前,对文档进行转换,对转换后的新文档构建索引。

使用篇

spring提供es组件(Spring Data ElasticSearch),这样我们可以方便的使用es了。

由Elasticsearch client与es进行连接,spring提供了更高层的抽象 Elasticsearch Operations和Repositories.

maven依赖

			org.springframework.boot
			spring-boot-starter-data-elasticsearch
使用过程的关注点
  • 配置器
  • 数据资源库
  • 转换器
  • 域对象

接下来分别详细介绍。

配置器

AbstractElasticsearchConfiguration作为autoconfig的配置器,继承该类以提供RestHighLevelClient、添加转换器。
ClientConfiguration针对es client的配置
RestHighLevelClient对RestClient进行了包装,提供构建请求和读取结果的能力。

数据资源库

@EnableElasticsearchRepositories自动扫描资源库
CrudRepository数据资源库,类似dao层
接口名称规则通过接口名称指定搜索条件

通过接口名称指定搜索条件,适用于count、delete、find,以下以find为例。以下为规则图示:

很重要的一个场景,分页如何搞呢?参数Pageable。 

着重说明:规则可组合。 

实例代码

public interface PersonRepository extends CrudRepository {

    
    List findByNameLikeOrderByAgeDesc(String name);

    
    List findByNameLikeAndAgeLessThanOrderByAgeDesc(String name, int age);

    
    int countByAgeIsLessThan(int age);

    
    void deleteByName(String name);

   
    List findByNameLike(String name, Pageable pageable);

    
    List findTop3ByNameLikeOrderByAge(String name);

    // ...
}

转换器 

Converter需要自定义实现类
@WritingConverter如域对象转换为map
@ReadingConverter如map转换为域对象

域对象

@document表明序列化到es的域对象。默认,启动时,自动创建索引。
@Field @Id

具体使用代码请见上文demo。

参考文档

Spring Data Elasticsearch - Reference documentationhttps://docs.spring.io/spring-data/elasticsearch/docs/4.2.5/reference/html/#reference

Elasticsearch Guide [7.15] | Elastichttps://www.elastic.co/guide/en/elasticsearch/reference/current/index.html

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/336217.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号