ElasticSearch搜索引擎入门基础(详细步骤)

我的未来我决定 提交于 2020-10-24 18:39:27

ElasticSearch

概述:

学习,从百度开始。 以下是Elasticsearch百度百科的介绍,如果已经了解,可以跳过。

​ Elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。

​ Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎。Elasticsearch用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。官方客户端在Java、.NET(C#)、PHP、Python、Apache Groovy、Ruby和许多其他语言中都是可用的。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr,也是基于Lucene。

​ Elasticsearch 是一个分布式、高扩展、高实时的搜索与数据分析引擎。它能很方便的使大量数据具有搜索、分析和探索的能力。充分利用Elasticsearch的水平伸缩性,能使数据在生产环境变得更有价值。

​ Elasticsearch 的实现原理主要分为以下几个步骤,首先用户将数据提交到Elasticsearch 数据库中,再通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据,当用户搜索数据时候,再根据权重将结果排名,打分,再将返回结果呈现给用户。

​ Elasticsearch是与名为Logstash的数据收集和日志解析引擎以及名为Kibana的分析和可视化平台一起开发的。这三个产品被设计成一个集成解决方案,称为“Elastic Stack”(以前称为“ELK stack”)。

下载安装

1、安装ElasticSearch

在安装Elasticsearch引擎之前,必须安装所需要的软件环境,安装Java JDK和配置JAVA_HOME环境变量,Elasticsearch5.0以上版本需要安装jdk1.8,其他版本安装jdk1.7即可。

访问官网的下载地址:https://www.elastic.co/downloads/elasticsearch,windows版的下载ZIP格式。

如果不想下载最新版,可以点击“past releases”选择过去的版本。我用的是7.6.1

下载好之后解压,解压之后会出现elasticsearch-7.6.1文件夹

进入到bin目录,双击elasticsearch.bat,该脚本文件执行 ElasticSearch 安装程序,稍等片刻。

在这里插入图片描述

打开浏览器,输入 http://localhost:9200 ,显式以下画面,说明ES安装成功。

tH2O9x.png

配置文件:

配置文件在安装目录下的config文件夹中

elasticsearch.yml : 用于配置Elasticsearch运行参数
jvm.options : 用于配置Elasticsearch JVM设置
log4j2.properties: 用于配置Elasticsearch日志

我的elasticsearch.yml配置如下:

cluster.name: qixx
node.name: qxx_node_01
network.host: 0.0.0.0
http.port: 9200
transport.tcp.port: 9300
node.master: true
node.data: true
discovery.zen.ping.unicast.hosts: ["0.0.0.0:9300", "0.0.0.0:9301"]
discovery.zen.minimum_master_nodes: 1
node.ingest: true
bootstrap.memory_lock: false
node.max_local_storage_nodes: 2
http.cors.enabled: true
http.cors.allow-origin: "*"
path.data: D:\ElasticSearch\elasticsearch-7.6.1\data
path.logs: D:\ElasticSearch\elasticsearch-7.6.1\logs

注意path.data和path.logs路径要配置正确。

常用的配置项如下:

cluster.name: 配置elasticsearch的集群名称,默认是elasticsearch。建议修改成一个有意义的名称。

node.name: 节点名,通常一台物理服务器就是一个节点,es会默认随机指定一个名字,建议指定一个有意义的名称,方便管 理

path.conf: 设置配置文件的存储路径,tar或zip包安装默认在es根目录下的config文件夹,rpm安装默认在/etc/ elasticsearch

path.data: 设置索引数据的存储路径,默认是es根目录下的data文件夹,可以设置多个存储路径, 用逗号隔开。

path.logs: 设置日志文件的存储路径,默认是es根目录下的logs文件夹

path.plugins: 设置插件的存 放路径,默认是es根目录下的plugins文件夹

bootstrap.memory_lock: true 设置为true可以锁住ES使用的内存,避免内存与swap分区交换数据。

network.host: 设置绑定主机的ip地址,设置为0.0.0.0表示绑定任何ip,允许外网访问,生产环境建议设置为具体 的ip。

http.port: 9200 设置对外服务的http端口,默认为9200。

transport.tcp.port: 9300 集群结点之间通信端口

node.master: 指定该节点是否有资格被选举成为master结点,默认是true,如果原来的master宕机会重新选举新 的master。

node.data: 指定该节点是否存储索引数据,默认为true。
discovery.zen.ping.unicast.hosts: [“host1:port”, “host2:port”, “…”] 设置集群中master节点的初始列表。
discovery.zen.ping.timeout: 3s 设置ES自动发现节点连接超时的时间,默认为3秒,如果网络延迟高可设置大些。 discovery.zen.minimum_master_nodes: 主结点数量的最少值 ,此值的公式为:(master_eligible_nodes / 2) + 1 ,比如:有3个符合要求的主结点,那么这 里要设置为2。
node.max_local_storage_nodes: 单机允许的最大存储结点数,通常单机启动一个结点建议设置为1,开发环境如果单机启动多个节点可设置大于1.


安装ElasticSearch-Head插件

Elasticsearch-head 是用于监控 Elasticsearch 状态的客户端插件,包括数据可视化、执行增删改查操作等,比较好用。

下载地址:elasticsearch-head,点击clone or download按钮,点击download zip进行下载。下载完毕后解压到任意路径上,别放在elasticsearch安装路径上。

在这里插入图片描述

安装Node.js

下载地址:node.js

安装grunt

运行head需要借助grunt命令,因此需要安装grunt。

打开cmd,输入命令 cd D:\Nodejs(你安装nodejs的路径) 进入Nodejs的根目录下。

输入npm install -g grunt -cli进行安装grunt。

安装pathomjs

输入命令 cd D:\head(你安装head的路径) 进入head的根目录下,然后执行命令:npm install 进行安装pathomjs

安装完成之后运行命令 grunt server,启动head服务(默认端口号是9100)。

用head访问elasticsearch浏览器访问http://localhost:9100 ;

进去之后点击连接,如果没反应可能是跨域问题, 打开D:\ElasticSearch\elasticsearch-7.6.1\config\elasticsearch.yml 在末尾加上下面两句

#开启cors跨域访问支持
http.cors.enabled: true
#跨域访问允许的域名地址,(允许所有域名)以上使 用正则 http.cors.allow-origin: /.*/
http.cors.allow-origin: "*"

在这里插入图片描述

至此,准备工作基本做完了。

创建索引库

ES 会索引所有字段,经过处理后写入一个反向索引(Inverted Index)。查找数据的时候,直接查找该索引。所以,ES 数据管理的顶层单位就叫做 Index(索引)。

ES的索引库是一个逻辑概念,它包括了分词列表及文档列表,同一个索引库中存储了相同类型的文档。

6.0之前的版本有type(类型)概念,type相当于关系数据库的表,ES官方将在ES7.0版本中彻底删除type。去掉了它就相当于 MySQL中的表。

1)、可以直接可视化界面创建

在这里插入图片描述

2)、发送put请求进行创建

这里使用的是postman工具

PUT请求:http://localhost:9200/索引库名称

在Body中添加:

{
	"settings":{
	"index":{
		"number_of_shards":1,
		"number_of_replicas":0
		}
	}
}

number_of_shards: 设置分片的数量,在集群中通常设置多个分片,表示一个索引库将拆分成多片分别存储不同 的结点,提高了ES的处理能力和高可用性,因为使用单机环境,这里设置为1。

number_of_replicas: 设置副本的数量,设置副本是为了提高ES的高可靠性,单机环境设置为0.

副本分片的主要目的是为了故障转移。

(1)故障转移/集群恢复
如果持有主分片的节点挂了,一个副本分片就会晋升为主分片 在索引写入时,副本分片做着与主分片相同的工作。新文档首先被索引进主分片然后再同步到其它所有的副本分片。增加副本数并不会增加索引容量。

(2)通过副本进行负载均衡
搜索性能取决于最慢的节点的响应时间,所以尝试均衡所有节点的负载是一个好想法。 如果我们只是增加一个节点而不是两个,最终我们会有两个节点各持有一个分片,而另一个持有两个分片做着两倍的工作。

在这里插入图片描述

创建映射

所有文档写进索引之前都会先进行分析,如何将输入的文本分割为词条、哪些词条又会被过滤,这种行为叫做映射(mapping)。一般由用户自己定义规则。

在索引中每个文档都包括了一个或多个字段,创建映射就是向索引库中创建字段的过程。

  • 文档(Document)-- 在关系型数据库中相当于-- Row记录
  • 字段(Field)-- 在关系型数据库中相当于-- Columns 列

创建:

​ POST请求 : http://localhost:9200/索引库名称/_mapping

此处演示创建类型为qxx_store的映射,共包括三个字段:name、details、code

{
  "properties": {
    "name": {
      "type": "text"
    },
    "details": {
      "type": "text"
    },
    "code": {
      "type": "keyword"
    }
  }
}

type后面的text表示支持分词,全文检索,支持模糊、精确查询,不支持聚合,排序操作;

keyword表示不进行分词,直接索引,支持模糊、支持精确匹配,支持聚合、排序操作。

在这里插入图片描述

创建文档

存储在ES中的一条数据即是一个文档,类似数据库的一行数据。ES会索引每个文档的内容,以便搜索。

它使用的JSON格式。即我们将数据存储到ES中,实际上是将JSON格式的字符串发给了ES。

创建:

​ POST/PUT请求:put 或Post http://localhost:9200/索引库名/_doc/id

​ id可以不指定,如果不指定ES会自动生成id值

{
  "name": "ES搜索引擎",
  "details": "Elasticsearch是与名为Logstash的数据收集和日志解析引擎以及名为Kibana的分析和可视化平台一起开发的。这三个产品被设计成一个集成解决方案,称为“Elastic Stack”(以前称为“ELK stack”)",
  "code": "2020"
}

在这里插入图片描述

搜索文档

根据id来查询:

​ 发送GET请求:http://localhost:9200/索引库名/_doc/1

在这里插入图片描述

查询名字包含引擎的记录:

在这里插入图片描述

{
  "query": {
    "match": {
      "name": "引擎"
    }
  }
}

响应:

在这里插入图片描述

took:耗费了几毫秒。

timed_out:是否超时。

_shards:数据拆成几个分片,对于搜索请求,会打到所有的主分片(primary shard)或者是它的某个副本分片(replica shard)也可以。

hits:查询的所有结果

hits里面的 total:查询结果的数量(多少个 document)

max_score:score的含义就是document对于一个search的相关度的匹配分数,越相关、就越匹配,分数也越高;

hits.hits(hits里面包含了hits):匹配度较高的前 N 个文档

_index:该文档所属的index

_type:该文档所属的type

_id:该文档的id

_source:具体的内容,即存储的json串

ik分词器

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

​ 你需要根据你对ES的版本来下载对应版本的IK,这里我使用的是7.6.1的版本,所以就下载7.6.1的zip文件。

在这里插入图片描述

​ 解压 --> 将文件复制到es的安装目录下的plugin/ik即可。

在这里插入图片描述
​ 到这步就已经完成了,不需要去elasticSearch.yml中配置。

​ 重启ElasticSearch。

​ 测试:

​ 发送GET请求:http://localhost:9200/_analyze

{"text":"分词器测试例子:ElaaticSearch","analyzer":"ik_max_word" }

“analyzer”:

​ 1、ik_max_word:会将文本做最细粒度的拆分,比如会将“中华人民共和国人民大会堂”拆分为“中华人民共和国、中华人民、中华、华人、人民共和国、人民、共和国、大会堂、大会、会堂等词语。

​ 2、ik_smart:会做最粗粒度的拆分,比如会将“中华人民共和国人民大会堂”拆分为中华人民共和国、人民大会堂。
在这里插入图片描述
响应:
在这里插入图片描述


到此ElasticSearch的简单入门例子就结束了。
更多内容详情参照官方文档:https://www.elastic.co/guide/index.html

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!