Elasticsearch入门级使用教程

分布式搜索引擎概述:

倒排索引:在搜索引擎中,每个文档都有一个对应的文档ID,文档内容被表示为一系列关键词的集合。倒排索引就是关键词到文档ID的映射,每个关键词都对应着一系列的文件,这些文件中都出现了关键词。

  • 倒排索引中的所有词项对应一个或多个文档;
  • 倒排索引中的词项根据字典顺序升序排列

Luence是一个开源的全文检索引擎工具包(类似于Java API),而ElasticSerach底层是基于这些包,对其进行了扩展,提供了比Luence更为丰富的查询语言,可以非常方便的通过Elasticsearch的HTTP接口与底层Luence交互。

ElasticSearch和Solr:当实时建立索引的时候,Solr会产生阻塞,而es不会,es查询性能要高于solr;在不断动态添加数据的时候,solr的检索效率会变的低下,而es则没有什么变化;Solr利用zookeeper进行分布式管理,而es自身带有分布式系统管理功能。Solr一般都要部署到web服务器,比如tomcat,启动tomcat的时候需要配置tomcat和solr的管理,solr的本质是一个动态的web项目;solr支持更多的数据格式(xml、json、csv等),而es仅支持json文件格式;Solr是传统搜索应用的有力解决方案,但是es更适用于新兴的实时搜索应用。单纯的对已有数据进行检索的时候,solr的效率高于es;solr官网提供的功能更多,而es本身更注重于核心功能,攻击功能有第三方插件。

1、Elasticsearch入门

Elasticsearch简介:一个分布式的、Restful风格(前后端交互的标准,http请求的格式)的搜索引擎;支持对各种类型的数据的检索;搜索速度快,可以提供实时的服务;便于水平扩展(集群时增加服务器),每秒可以处理PB级海量数据。

本质上是一个分布式数据库。

Elasticsearch术语:

索引、类型、文档、字段,与数据库的定义相对应,即database、table、row、column

集群、节点、分片(对索引进行划分,提高并发能力)、副本(备份)。

在多台机器上启动多个es进程实例,组成了一个es集群。

2、Elasticsearch安装配置

需要安装elasticsearch和分词插件两个工具。直接下载压缩文件解压缩即可,修改配置文件。

es下载网址:https://www.elastic.co/cn/downloads/past-releases/elasticsearch-6-4-3

解压缩后更改配置文件:cluster.name(集群名字)、path.data(存储数据的路径)、path.log(日志路径)

分词插件下载:https://github.com/medcl/elasticseatch-analysis-ik/releases/tag/v6.4.3

加压缩到es的plugins目录并新建ik文件夹下。

启动es:elasticsearch.bat

3、Spring整合Elasticsearch

redis和elasticsearch都是基于netty,解决netty启动冲突问题:

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

使用:数据库中的表和es中的索引对应。注解的方式实现。

实体类上加@Document注解,属性上面加@Id、@Field 注解。

@Document(indexName = "discusspost", type = "_doc", shards = 6, replicas = 3)
@Id
@Field(type = FieldType.Text, analyzer = "ik_max_word", searchAnalyzer = "ik_smart")

dao层定义实现 ElasticsearchRepository的接口,不需要声明任何方法,里面封装了相应的查询、增加、删除等方法。

使用时直接注入上述定义的repository接口,调用相应方法即可完成业务逻辑。ElasticsearchTemplate用来解决repository处理不了的情况,使用时直接注入。

4、常见问题

数据库中的数据和es中的数据一致性问题:

在使用时可以先将数据插入到数据库中,而后根据插入的id,搜索刚才插入的数据,将该数据插入到es中。

常见的缓存策略:

Cache Aside Pattern(旁路缓存模式):

写:先更新DB;然后直接删除cache

读:从cache中读取数据,读取到直接返回;cache中读取不到的话,就从DB中读取数据返回;再把数据放到cache中。

Read/Write Through Pattern(读写穿透):

写:先查cache,cache中不存在,直接更新DB;cache中存在,则先跟新cache,然后cache服务自己更新DB。(同步更新cache和DB)

读:从cache中读取数据,读取到就直接返回;读取不到的话,先从DB加载,写入到cache后返回响应。

Write Behind Pattern(异步缓存写入):

和Read/Write Through Pattern很相似。不同的是Read/Write Through 是同步更新 cache 和 DB,而 Write Behind Caching 则是只更新缓存,不直接更新 DB,而是改为异步批量的方式来更新 DB。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值