非关系型数据库 之 Elasticsearch的使用(Search engine DB)

1、简介

增删改查是数据库的基础操作方法。ES 虽然不是数据库,但是很多场合下,都被人们当做一个文档型 NoSQL 数据库在使用,原因自然是因为在接口和分布式架构层面的相似性。虽然在 Elastic Stack 场景下,数据的写入和查询,分别由 Logstash 和 Kibana 代劳,作为测试、调研和排错时的基本功,还是需要了解一下 ES 的增删改查用法的。

2、概念

ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。
我们建立一个网站或应用程序,并要添加搜索功能,但是想要完成搜索工作的创建是非常困难的。我们希望搜索解决方案要运行速度快,我们希望能有一个零配置和一个完全免费的搜索模式,我们希望能够简单地使用JSON通过HTTP来索引数据,我们希望我们的搜索服务器始终可用,我们希望能够从一台开始并扩展到数百台,我们要实时搜索,我们要简单的多租户,我们希望建立一个云的解决方案。因此我们利用Elasticsearch来解决所有这些问题及可能出现的更多其它问题。

3、增数据

3.1示例

ES 的一大特点,就是全 RESTful 接口处理 JSON 请求。所以,数据写入非常简单:
Post IP:Port/索引/类型索引+Json串

3.2如图

非关系型数据库 之 Elasticsearch的使用(Search engine DB)

4、查数据

4.1同一类型下模糊查询

4.1.1示例

Get IP:Port/索引/_search

4.1.2如图

非关系型数据库 之 Elasticsearch的使用(Search engine DB)

4.2根据ID精确查询

4.2.1示例

Get IP:Port/索引/类型索引/ID

4.2.2如图

非关系型数据库 之 Elasticsearch的使用(Search engine DB)

5、更新数据

5.1根据ID局部更新

5.1.1示例

Post IP:Port/索引/索引类型/ID/_update + {doc:{更改内容}}

5.1.2如图

非关系型数据库 之 Elasticsearch的使用(Search engine DB)

5.2根据ID精确更新

5.2.1示例

Post IP:Port/索引/类型索引/ID

5.2.2如图

非关系型数据库 之 Elasticsearch的使用(Search engine DB)

6、删数据

6.1根据ID精确删除数据

6.1.1示例

DELETE IP:Port/索引/类型索引/ID

6.1.2如图

非关系型数据库 之 Elasticsearch的使用(Search engine DB)

6.2删除整个索引

删除不单针对单条数据,还可以删除整个整个索引。甚至可以用通配符

6.2.1示例

DELETE IP:Port/索引/

6.2.2如图

非关系型数据库 之 Elasticsearch的使用(Search engine DB)

7、下载安装

7.1、下载

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

7.2、安装

现在合适的目录下载安装包:

# 下载
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.7.0.tar.gz

# 解压
tar zxvf elasticsearch-6.7.0.tar.gz

前台启动:

./elasticsearch-6.7.0/bin/elasticsearch

8、注意事项

8.1、“Java HotSpot™ 64-Bit Server VM warning: INFO: os::commit_memory(0x0000000085330000, 2060255232, 0) failed; error=‘Cannot allocate memory’ (errno=12)”的解决方案

非关系型数据库 之 Elasticsearch的使用(Search engine DB)
错误原因:
①、内存不足: 减少启动程序所需内存,或加大内存,如关闭一些程序
②、Es的默认内存使用是1g或者2g,所以修改成512m或者适合的大小。
方法:vim elasticsearch-6.7.0/config/jvm.options

# vim config/jvm.options
-Xms512m # -Xms2g
-Xmx512m # -Xmx2g

8.2、“Caused by: java.lang.RuntimeException: can not run elasticsearch as root”的解决方案

非关系型数据库 之 Elasticsearch的使用(Search engine DB)
①、错误原因:如果以root身份运行将会出现以下问题,这个错误,是因为使用root用户启动elasticsearch,elasticsearch是不允许使用root用户启动的。
②、解决方案:

1、添加用户
    adduser ***   //添加用户
    passwd ***  //给用户赋值
2、添加完用户之后:
用root用户执行 : chown -R 用户名 文件夹名

3、将这几个压缩包所在的文件夹及解压完的文件夹权限给你新建的用户

4、使用新用户启动就OK了

8.3、“ERROR: [1] bootstrap checks failed [1]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]”的解决方案

非关系型数据库 之 Elasticsearch的使用(Search engine DB)
解决方案:
1、切换到root用户修改配置sysctl.conf

vim /etc/sysctl.conf 

2、添加下面配置:

vm.max_map_count=655360

3、更新命令:

sysctl -p

然后,重新启动elasticsearch

9、网页版测试工具Head

9.1、下载

github地址:https://github.com/mobz/elasticsearch-head

9.2、安装

unzip elasticsearch-head-master

9.3、head 插件是node.js实现的,因此需要安装nodejs

curl -sL https://rpm.nodesource.com/setup_8.x | bash -
yum install -y nodejs

安装完成,验证是否安装成功:

node -v 
npm -v

9.4、进入elasticsearch-head-master目录,安装grunt

npm install grunt --save-dev
npm install 

9.5、修改配置文件

cd 进入elasticsearch-head-master 文件夹下,执行命令vim Gruntfile.js文件:增加hostname属性,设置为*;如图:
非关系型数据库 之 Elasticsearch的使用(Search engine DB)

9.6、修改head插件的连接地址

vim _site/app.js 文件:修改head的连接地址:,如图所示:在js文件的最下面,我是找了蛮久,ip地址改为你的es所在服务器的ip
非关系型数据库 之 Elasticsearch的使用(Search engine DB)

9.7、修改elasticsearch配置,elasticsearch.yml,

要允许插件访问,添加

http.cors.enabled: true
http.cors.allow-origin: "*"

9.8、在elasticsearch-head-master 下执行,npm run start 命令,启动

(注意:防火墙的端口一定要开哈)
非关系型数据库 之 Elasticsearch的使用(Search engine DB)