设为首页 加入收藏

TOP

〈一〉ElasticSearch的介绍(二)
2019-09-19 11:12:05 】 浏览:150
Tags:ElasticSearch 介绍
有考虑集群,所以对于存储在不同服务器上的大量数据的交互比较麻烦,而ElasticeSearch一开始就是集群思想的,数据存储以一个ElasticSearch节点为单位,多个节点的数据可以交流。
由于底层是Lucene,所以,对于一些elasticsearch底层的东西,有时候你完全可以参照Lucene,比如索引词文件的存储等。

为什么不是Solr?
Solr也是一个知名的搜索引擎,它与ElasticSearch各有好处,Solr适用于一些非实时搜索系统(新增的数据不要求马上查出来的),而ElasticSearch适用于一些实时搜索要求较高的系统(电商平台等要求新商品马上可查的系统)。因为Solr在建立索引时,搜索效率下降,实时索引搜索效率不高,而ElasticSearch建立索引的速度较快。

ElasticSearch有一个非常显著的特性"NRT":NRT全称Near Real Time,近实时,意思是你插入的数据几乎可以“马上”就可以被搜索出来。这也是为什么它能使用在实时更新要求高的场景的原因。




搜索的处理

上面提了词的拆分,这里提一些关于底层的搜索处理的内容。介绍一下ElasticSearch另一个协助搜索的关键组件--分词器。ElasticSearch的全文搜索离不开分词器的帮助。

分词器通常由分解器tokenizer和词元过滤器token filter组成。

分词器对数据的分词处理:为了提高索引的效率,ElasticSearch会数据进行处理,处理方式主要有字符过滤、词转换、词拆分
字符过滤:过滤一些特殊字符,例如&||、html标签,因为这些词通常搜索意义不大。

词转换:把一些意义相同的词统一转成一个词,(同词义转换)比如mom,mother统一转成mom;(大小写转换)he,He统一归为He;还处理一些词意义不大的词(停用词清除),比如英文的“the”,“to”,这些词使用频率很高,但没有具体意义。

词拆分:进行数据的拆分,拆分成词,比如把good morning,mom拆分成good,morining,mom。另外,词拆分并不完全是按照数据的最小单位分解的,某一些分词器会把一些词进行组合,因为一些词的组合起来才有索引的意义,比如中文的一些词通常要组合起来才有意义,比如“大”和“家”要组成“大家”才有比较具体的意义,这是为了确保索引词的最小单位是有意义的(比如英文mom的最小单位是m,o,m,内部的分词器要能够区分出mom整个是有意义的才可以确保是采用mom作为索引,而不是采用m和o,也正是因为这个问题,所以英文分词器不能用于中文分词器)。【分词器有很多个,默认的分词器是不能适当对中文数据分词的,它只能把一个个数据按最小的单位拆分,因为英文分词器不能分清楚怎么把词拆分才有意义,由于配置分词器是一个较为靠后的知识点,所以前期将以英文数据为测试数据。

分词文件的存储:
分词文件一般包括三种文件:词典文件,频率文件,位置文件。
词典文件保存了关键词(索引词),还保留了指向频率文件和位置文件的指针。
频率文件记录了词出现的频率。
位置文件记录了这些词出现在哪些数据中。




补充:

  • 数据库不是被替代,而是被补充。有时候会将数据同时存储到数据库和ElasticSearch中,在单个查看的时候可以从数据库中查询,在搜索的时候从ElasticSearch中查询;也有的项目由于数据比较简单完全使用elasticsearch来存储数据。
  • ElasticSearch是分布式的,但我们是不需要对其集群进行部署的,它自动进行了集群部署和节点发现等功能,我们只需进行很少的配置就能管理集群。在比较靠后的内容才会讲到如何深入管理集群。

小节总结:

  • 1.本小节简单讲述了ElasticSearch是什么
  • 2.传统搜索的不足
  • 3.使用ElasticSearch搜索的好处
  • 4.全文搜索和倒排索引
  • 5.与其他搜索引擎的比较
  • 6.ElasticSearch对于索引词的处理(这个内容是提前讲的内容,是为了帮助了解倒排索引如何建立索引)

基本学习环境搭建


如何操作ElasticSearch

首先要说的是,ElasticSearch是一款软件,有点类似MySQL,我们要操作它的时候,也要给它发送它能识别的命令,而ElasticSearch是面向restful(不知道restful的自查吧)的,所以我们发送的命令是有点类似发送http请求的。

mysql是3306端口,而elasticsearch支持9200和9300端口操作,其中9200面向http,9300面向tcp。9200能够使用普通的http请求来操作elasticsearch,9300需要连接elasticsearch之后再执行命令。

  • 对于9200,因为面向http,所以我们可以使用postman发http请求来操作elasticsearch。
  • 对于9300,因为面向tcp,我们通常使用一些elasticsearch管理工具(如kibana)进行连接elasticsearch之后再执行命令。(类似navicat之于mysql)


下载、安装和运行(Based Windows)



我们首先来搭建好学习环境,主要是ElasticSearch和Kibana。【请注意,Elasticsearch依赖Java环境】
【Kibana是可选的,下面会介绍一下基于postman的对ElasticSearch操作。】,Kibana是一款对ElasticSearch进行管理的软件,我们可以在Kibana上执行ElasticSearch的命令。

下载:


  • ElasticSearch下载:ElasticSearch下载【这里以6.2的为例】
  • Kibana下载:Kibana下载 【两个下载都是同一个位置,这里下载以6.2的为例】【Kibana的版本尽量与ElasticSearch的一致,有些版本会连接错误】


安装:

  • 两个软件都是不需要安装的,下载后,直接解压即可。

运行:

  • 对于ElasticSearch,可以直接在elasticsearch-6.2.0\bin中运行elasticsearch.bat,当提示“started”时,表示运行成功。
  • 对于Kibana,可以直接在kibana-6.2.0-windows-x86_64\bin中运行kibana.bat,当提示“Server running at http://localhost:5601”时,表示运行成功。【要先运行ElasticSearch再运行Kibana,因为它要与ElasticSearch进行连接】



如何操作ES

ElasticSearch默认的TCP服务端口是9300,Kibana的服务端口是5601,当我们启动了Kibana之后,它会默认帮我们连接上9300,所以我们可以从http://localhost:5601中进入Kibana的管理界面来管理ElasticSearch。
如果你是第一次使用,那么ElasticSearch会自动创建一个名为elasticsearch的集群,Kibana会在这个节点中初始化一个index


我们在Kibana的DevTools中执行一些命令来看一下Elasti

首页 上一页 1 2 3 4 5 下一页 尾页 2/5/5
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇数据库基础 关系数据模型 下一篇Spark学习笔记3——RDD(下)

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目