什么是Elasticsearch?

简单地说,Elasticsearch就是用来搜索的。传统的数据库,想要搜索某一条信息时,用到的SQL命令是:like %关键字%。然而,在一些大数据的环境下,这种SQL就会特别慢。因此要用到Elasticsearch。

通过简单连贯的RESTful API让全文搜索变得简单并隐藏Lucene的复杂性。分布式的实时文件存储,每个字段都被索引并可被搜索。实时分析的分布式搜索引擎。可以扩展到上百台服务器,处理PB级结构化或非结构化数据。

因此,未来只要需要搜索,就可以用ES。

上文提到的Lucence就是用于全文检索的,是一套信息检索工具包,不包含搜索引擎。包含:索引结构(有点像数据库)、读写索引的工具、排序搜索的规则。但是由于数据量越来越大,因此Lucence逐渐不够用了。

Elasticsearch就是基于Lucence做了一些封装和增强。

ES(Elasticsearch)就是一个开源的高扩展分布式全文检索引擎。他可以做到近乎实时的存储和检索数据(查询的效率非常非常高)。

ES & Solr

ES用于全文搜索、结构化搜索、分析三个方面。

例如:维基百科使用ES进行搜索,并高亮搜索的关键字。Stackoverflow、Github都用到了ES。

Solr也是基于Lucence,同时实现了可配置、可拓展、并优化了搜索性能

随着数据量的增加,Solr的处理速度远低于ES。

ES基本就是解压就可以用。Solr需要搭载Zookeeper环境。

ES安装

下载地址:https://www.elastic.co/cn/downloads/elasticsearch

解压文件,观察config文件夹下的配置文件,可以发现ES的默认端口是9200

使用Terminal进入相应文件夹,进入Bin文件夹,运行ES。ES跑起来以后,可以去浏览器访问默认的地址127.0.0.1:9200。然后就能看到版本信息。

可视化操作ES,可以使用Google Chrome,使用插件ES Head。

Kibana也是针对ES的一个可视化平台,可以用来搜索和查看交互存储在ES上面的数据。在ES官网下载,和ES安装一样的步骤。跑起来以后,默认的地址是http://localhost:5601

面向文档的ES

Elasticsearch 是 面向文档的,意味着它存储整个对象或文档。Elasticsearch 不仅存储文档,而且索引每个文档的内容使之可以被检索。在 Elasticsearch 中,你 对文档进行索引、检索、排序和过滤–而不是对行列数据。这是一种完全不同的思考数据的方式,也是 Elasticsearch 能支持复杂全文检索的原因。

DBES
数据库 Database索引 Index
表 TableType
行 RowsDocuments
字段 ColumnsFields

默认的集群名称就是Elasticsearch。

ES后台把每个索引划分为了多个分片。索引可以直接理解成一个数据库,是一个非常大的文档集合。

所谓文档,就是一条条的数据。

一个集群至少有一个节点,一个节点就是一个ES进程。

IK分词器

下载地址:https://github.com/medcl/elasticsearch-analysis-ik/releases

IK分词器对中文比较友好,IK分词器提供了两个分词的算法,一个是ik_smart,一个是ik_max_word。前者是最小切分,后者是最细粒度划分。下两图是两种算法的结果

ik_smart
ik_max_word

下图可以看到,“田睿霖”这个词,在分词器中并没有被当成一个词。因此,可以将“田睿霖”这个词加到字典里面。

  1. 进入IK的文件夹,在config里面添加一个自己写的dic文件。
  2. 然后在config里面的xml文件里面添加刚刚创建的dic文件名。
  3. 重启ES。
加入新词后的搜索

在未来的工作中,可以在自己的dic文件中加入自己想要的词。

Restful风格的基本操作

Method描述
PUT创建文档
GET查看信息
POST创建、更新、查询
DELETE删除
PUT操作

type在后续版本中,默认是_doc.

添加索引后的数据浏览
不添加具体的值,新建一个索引规则

GET可以直接得到具体的信息。如果PUT不定义类型,他会自动分配类型,示例如下。

创建一个新的索引,带有三种格式的数据,但没有定义类型
可以看到,自动分配了类型和keyword

通过 “GET _cat/” 可以获得ES当前的信息。

POST可以用来修改数据,如下图。

修改后,version变成了2

接下来尝试搜索功能:

首先,新建一个索引。

新建索引
数据浏览
再创建n个新用户
使用GET方法查询某一条数据
使用POST方法修改某一条数据

切记使用POST方法更新数据时,用_update。否则数据就会像PUT一样被覆盖掉。

最简单的搜索就是上文提到的GET,即通过ID查询。但是我们需要条件查询,所以需要下面的操作:

查找name中有“田”的文档

Categories:

Tags: