天天看点

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

文章目录

  • ​​1、简介​​
  • ​​2、概念​​
  • ​​3、增数据​​
  • ​​3.1示例​​
  • ​​3.2如图​​
  • ​​4、查数据​​
  • ​​4.1同一类型下模糊查询​​
  • ​​4.1.1示例​​
  • ​​4.1.2如图​​
  • ​​4.2根据ID精确查询​​
  • ​​4.2.1示例​​
  • ​​4.2.2如图​​
  • ​​4.3 条件查询、组合查询​​
  • ​​4.3.1示例​​
  • ​​4.3.2如图​​
  • ​​5、更新数据​​
  • ​​5.1根据ID局部更新​​
  • ​​5.1.1示例​​
  • ​​5.1.2如图​​
  • ​​5.2根据ID精确更新​​
  • ​​5.2.1示例​​
  • ​​5.2.2如图​​
  • ​​5.3根据某一字段更新​​
  • ​​5.3.1示例​​
  • ​​5.3.2如图​​
  • ​​5.4根据多个字段查询后,组合更新(并或关系)​​
  • ​​5.4.1示例​​
  • ​​5.4.2如图​​
  • ​​5.5根据循环或者条件语句查询后更新​​
  • ​​5.5.1示例​​
  • ​​5.5.2如图​​
  • ​​6、删数据​​
  • ​​6.1根据ID精确删除数据​​
  • ​​6.1.1示例​​
  • ​​6.1.2如图​​
  • ​​6.2删除整个索引​​
  • ​​6.2.1示例​​
  • ​​6.2.2如图​​
  • ​​7、下载安装​​
  • ​​7.1、下载​​
  • ​​7.2、安装​​
  • ​​7.3、启动​​
  • ​​8、注意事项​​
  • ​​8.1、“Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x0000000085330000, 2060255232, 0) failed; error='Cannot allocate memory' (errno=12)”的解决方案​​
  • ​​8.2、“Caused by: java.lang.RuntimeException: can not run elasticsearch as root”的解决方案​​
  • ​​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]”的解决方案​​
  • ​​9、网页版测试工具Head​​
  • ​​9.1、下载​​
  • ​​9.2、安装​​
  • ​​9.3、head 插件是node.js实现的,因此需要安装nodejs​​
  • ​​9.4、进入elasticsearch-head-master目录,安装grunt​​
  • ​​9.5、修改配置文件​​
  • ​​9.6、修改head插件的连接地址​​
  • ​​9.7、修改elasticsearch配置,elasticsearch.yml,​​
  • ​​9.8、在elasticsearch-head-master 下执行,npm run start 命令,启动​​
  • ​​10、源码分享Github​​

1、简介

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

2、概念

ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。

我们建立一个网站或应用程序,并要添加搜索功能,但是想要完成搜索工作的创建是非常困难的。我们希望搜索解决方案要运行速度快,我们希望能有一个零配置和一个完全免费的搜索模式,我们希望能够简单地使用JSON通过HTTP来索引数据,我们希望我们的搜索服务器始终可用,我们希望能够从一台开始并扩展到数百台,我们要实时搜索,我们要简单的多租户,我们希望建立一个云的解决方案。因此我们利用Elasticsearch来解决所有这些问题及可能出现的更多其它问题。

默认端口:9200

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)

4.3 条件查询、组合查询

实际开发中,基本都是组合多条件查询。elasticsearch提供bool来实现这种需求;

主要参数:

  • must:文档 必须 匹配这些条件才能被包含进来。
  • must_not:文档 必须不 匹配这些条件才能被包含进来。
  • should:如果满足这些语句中的任意语句,将增加 _score ,否则,无任何影响。它们主要用于修正每个文档的相关性得分。
  • filter:必须 匹配,但它以不评分、过滤模式来进行。这些语句对评分没有贡献,只是根据过滤标准来排除或包含文档。

4.3.1示例

条件:

Get IP:Port/索引/索引类型/_search + {“query”: {“bool”: {“must”:{“match”:{查询字段}}}}}

组合:

Get IP:Port/索引/索引类型/_search + {“query”: {“bool”: {“must”:{多个条件}}}}

4.3.2如图

条件查询:

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

组合查询:

非关系型数据库 之 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)

5.3根据某一字段更新

5.3.1示例

Post IP:Port/索引/索引类型/_update_by_query +

{

“script”: {

“source”: “ctx._source[更改字段名称]=‘更改后的字段值’”

},

“query”: {

“bool”: {

“must”:{

“match”:

{“匹配的字段”:“匹配的字段值”}

}

}

}

}

5.3.2如图

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

5.4根据多个字段查询后,组合更新(并或关系)

5.4.1示例

Post IP:Port/索引/索引类型/_update_by_query +

{

“script”: {

“source”: “ctx._source[更改字段名称]=‘更改后的字段值’”

},

“query”: {

“bool”: {

“should”: [

{“match”: { “匹配的字段”:“匹配的字段值” }},

{“match”: { “匹配的字段”:“匹配的字段值” }}

]

}

}

}

5.4.2如图

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

5.5根据循环或者条件语句查询后更新

5.5.1示例

Post IP:Port/索引/索引类型/_update_by_query +

{

“script”: {

“lang”: “painless”,

“inline”: “for(int i=0;i<ctx._source.content.length;i++){if (i==0){ctx._source.content[i].silence_duration = Integer.parseInt(ctx._source.content[i].bps)/1000}else{ctx._source.content[i].silence_duration = (Integer.parseInt(ctx._source.content[i].bps)-Integer.parseInt(ctx._source.content[i-1].eps))/1000}}”

},

“query”: {

“bool”: {

“should”: [

{“match”: { “匹配的字段”:“匹配的字段值” }},

{“match”: { “匹配的字段”:“匹配的字段值” }}

]

}

}

}

5.5.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      

7.3、启动

前台启动:

./elasticsearch-6.7.0/bin/elasticsearch      

有时候必须在es用户下启动,那就先切换到es用户下,在执行启动命令

后台启动:

sudo su es
nohup ./elasticsearch-6.7.0/bin/elasticsearch > es.log 2>&1 &      

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 命令,启动

(注意:防火墙的端口一定要开哈)

10、源码分享Github

继续阅读