ElasticSearch 概念介绍和部署(下)

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: Elasticsearch是用Java开发并且是当前最流行的开源的企业级搜索引擎。能够达到实时搜索,稳定,可靠,快速,安装使用方便。

4.3启动ES服务


三台机器使用baiqi用户执行以下命令启动es服务


nohup /usr/local/es/elasticsearch‐7.6.1/bin/elasticsearch 2>&1 &


启动成功之后jsp即可看到es的服务进程,并且访问页面


http://127.0.0.1:9200/?pretty


能够看到es启动之后的一些信息


注意:如果哪一台机器服务启动失败,那么就到哪一台机器的


/usr/local/es/elasticsearch‐7.6.1/log


这个路径下面去查看错误日志


# 注意:防火墙涉及到系统安全,如有必要请咨询 devops, ops
# 关闭 Linux 防火墙
# 永久性生效,重启后不会复原
开启:chkconfig iptables on
关闭:chkconfig iptables off
# 即时生效,重启后复原
开启:service iptables start
关闭:service iptables stop


注意:启动ES的时候出现 Permission denied


原因:当前的用户没有对XX文件或目录的操作权限


5.客户端Kibana安装

5.1客户端可以分为图形界面客户端,和代码客户端.

5.2ES主流客户端Kibana,开放9200端口与图形界面客户端交互


1)下载Kibana放之/usr/local/es目录中


2)解压文件:tar -zxvf kibana-X.X.X-linux-x86_64.tar.gz


3)进入/usr/local/es/kibana-X.X.X-linux-x86_64/config目录


4)使用vi编辑器:vi kibana.yml


server.port: 5601
server.host: "0.0.0.0"
# es 服务器的 ip 和端口
elasticsearch.hosts: ["http://localhost:9200"]


5)启动Kibana


./kibana


6)访问Kibana


http://127.0.0.1:5601/app/kibana


6.安装IK分词器


我们后续也需要使用Elasticsearch来进行中文分词,所以需要单独给Elasticsearch 安装IK分词器插件。以下为具体安装步骤:

6.1下载Elasticsearch IK分词器


下载地址:github.com/medcl/elast…

6.2切换到 hxl 用户,并在es的安装目录下/plugins创建ik


mkdir ‐p /usr/local/es/elasticsearch‐7.6.1/plugins/ik


6.3将下载的ik分词器上传并解压到该目录


cd /usr/local/es/elasticsearch‐7.6.1/plugins/ik
unzip elasticsearch‐analysis‐ik‐7.6.1.zip

6.4重启Elasticsearch

6.5 测试分词效果


POST _analyze
{
  "analyzer":"standard",
  "text":"我爱你中国"
}
#ik_smart:会做最粗粒度的拆分
POST _analyze
{
  "analyzer":
  "ik_smart",
  "text":"中华人民共和国"
}
#ik_max_word: 会将文本做最细粒度的拆分
POST _analyze
{
"analyzer":"ik_max_word",
"text":"我爱你中国"
}

7.指定IK分词器作为默认分词器


ES的默认分词设置是standard,这个在中文分词时就比较尴尬了,会单字拆分,比如我搜索关键词“清华大学”,这时候会按“清”,“华”,“大”,“学”去分词,然后搜出来的都是些“清清的河水”,“中华儿女”,“地大物博”,“学而不思则罔”之类的莫名其妙的结果,这里我们就想把这个分词方式修改一下,于是呢,就想到了ik分词器,有两种ik_smart和ik_max_word。


ik_smart会将“清华大学”整个分为一个词,而ik_max_word会将“清华大学”分为“清华大学”,“清华”和“大学”,按需选其中之一就可以了。


修改默认分词方法(这里修改school_index索引的默认分词为:ik_max_word):


PUT /school_index
{
  "settings" : {
    "index" : {
      "analysis.analyzer.default.type": "ik_max_word"
    } 
  }
}

8.ES数据管理


8.1ES数据管理概述


ES是面向文档(document oriented)的,这意味着它可以存储整个对象或文档(document)。


然而它不仅仅是存储,还会索引(index)每个文档的内容使之可以被搜索。


在ES中,你可以对文档(而非成行成列的数据)进行索引、搜索、排序、过滤。ES使用JSON作为文档序列化格式。


JSON现在已经被大多语言所支持,而且已经成为NoSQL领域的标准格式。ES存储的一个员工文档的格式示例:


{
"email" : "zhangsan@hw.cn",
"name" : "张三", 
"age" : 32,
"interests" : ["篮球", "足球"]
}


8.2基本操作


1)创建索引


格式: PUT /索引名称


PUT /es_db


2)查询索引


格式: GET /索引名称


GET /es_db


3)删除索引


格式: DELETE /索引名称


DELETE /es_db


4)添加文档


格式: PUT /索引名称/类型/id


PUT /es_db/_doc/1
{
    "name":"张三",
    "sex":1,
    "age":25,
    "address":"广州天河公园",
    "remark":"java developer"
}
PUT /es_db/_doc/2
{
"name": "李四",
"sex": 1,
"age": 28,
"address": "广州荔湾大厦",
"remark": "java assistant"
}
PUT /es_db/_doc/3
{
"name": "rod",
"sex": 0,
"age": 26,
"address": "广州白云山公园",
"remark": "php developer"
}
PUT /es_db/_doc/4
{
"name": "admin",
"sex": 0,
"age": 22,
"address": "长沙橘子洲头",
"remark": "python assistant"
}
PUT /es_db  /_doc /5
{
"name": "小明",
"sex": 0,
"age": 19,
"address": "长沙岳麓山",
"remark": "java architect assistant"
}


5)  修改文档


格式: PUT /索引名称/类型/id 
举例: 
PUT /es_db/_doc/1 
{ 
"name": "张飞", 
"sex": 1,
"age": 25, 
"address": "张家界森林公园", 
"remark": "php developer assistant"
}


**可能出现的问题: **

重启服务可能遇到的问题:TOO_MANY_REQUESTS/12/disk usage exceeded flood-stage watermark, index has read-only-allow-delete block,可以参考下面配置。


关键的参数cluster.routing.allocation.disk.threshold_enabled

(es可以根据磁盘使用情况来决定是否继续分配shard。默认设置是开启的).

为了在本地单机上测试,我自己电脑磁盘空间剩下没多少了,修改elasticsearch.yml,设置cluster.routing.allocation.disk.threshold_enabled: false。

如果后续虚拟机磁盘空间不够,启动失败了可以删除了data,logs里的文件。


问题:

ES插入大量的数据时报错:TOO_MANY_REQUESTS/12/disk usage exceeded flood-stage watermark, index has read-only-allow-delete block 的解决方法


原因:

是因为一次请求中批量插入的数据条数巨多,以及短时间内的请求次数巨多引起ES节点服务器内存超过限制,ES主动给索引上锁。


解决办法:

PUT _all/_settings
{
  "index.blocks.read_only_allow_delete": null
}


6) 查询文档


格式: GET /索引名称/类型/id
GET /es_db/_doc/1


7)删除文档


格式: DELETE /索引名称/类型/id
DELETE /es_db/_doc/2
# 如果是 PowerShell 可以使用下面的请求命令
curl -uri 'http://localhost:9200/es_db/_doc/2' -method 'DELETE'

9.Restful认识


Restful是一种面向资源的架构风格,可以简单理解为:使用URL定位资源,用HTTP 动词(GET,POST,DELETE,PUT)描述操作。 基于Restful API ES和所有客户端的交互都是使用JSON格式的数据.


其他所有程序语言都可以使用RESTful API,通过9200端口的与ES进行通信


GET 查询


PUT 添加


POST 修改


DELETE 删除


用户做 crud


Get http://localhost:8080/employee/1
 Get http://localhost:8080/employees 
 put http://localhost:8080/employee
 { 
 } 
 delete http://localhost:8080/employee/1 
 Post http://localhost:8080/employee/1
 {
 }


使用Restful的好处:


透明性,暴露资源存在。


充分利用 HTTP 协议本身语义,不同请求方式进行不同的操作

10.查询操作


10.1查询当前类型中的所有文档 _search


格式: GET /索引名称/类型/_search 
举例: GET /es_db/_doc/_search 
SQL: select * from student


10.2条件查询, 如要查询age等于28岁的 _search?q=:**


格式: GET /索引名称/类型/_search?q=*:*** 
举例: GET /es_db/_doc/_search?q=age:28 
SQL: select * from student where age = 28


10.3范围查询, 如要查询age在25至26岁之间的 _search?q=[** TO **]  注意: TO 必须为大写


格式: GET /索引名称/类型/_search?q=***[1 TO 100] 
举例: GET /es_db/_doc/_search?q=age[1 TO 100] 
SQL: select * from student where age between 1 and 100


10.4根据多个ID进行批量查询 _mget


格式: GET /索引名称/类型/_mget 2 
举例: 
GET /es_db/_doc/_mget 
{ 
"ids":["1","2"] 
} 
SQL: select * from student where id in (1,2)


10.5查询年龄小于等于28岁的 :<=


格式: GET /索引名称/类型/_search?q=age:<=** 
举例: GET /es_db/_doc/_search?q=age:<=28 
SQL: select * from student where age <= 28


10.6查询年龄大于28前的 :>


格式: GET /索引名称/类型/_search?q=age:>** 
举例: GET /es_db/_doc/_search?q=age:>28 
SQL: select * from student where age > 28


10.7分页查询 from=&size=


格式: GET /索引名称/类型/_search?q=age[25 TO 26]&from=0&size=1 
举例: GET /es_db/_doc/_search?q=age[25 TO 26]&from=0&size=1 
SQL: select * from student where age between 25 and 26 limit 0, 1


10.8对查询结果只输出某些字段 _source=字段,字段


格式: GET /索引名称/类型/_search?_source=字段,字段 
举例: GET /es_db/_doc/_search?_source=name,age 
SQL: select name,age from student


10.9对查询结果排序 sort=字段:desc/asc


格式: GET /索引名称/类型/_search?sort=字段 desc 
举例: GET /es_db/_doc/_search?sort=age:desc 
SQL: select * from student order by age desc

Reference








相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
相关文章
|
2月前
|
存储 分布式计算 大数据
大数据-169 Elasticsearch 索引使用 与 架构概念 增删改查
大数据-169 Elasticsearch 索引使用 与 架构概念 增删改查
59 3
|
28天前
|
测试技术 API 开发工具
ElasticSearch核心概念:倒排索引
ElasticSearch核心概念:倒排索引
52 6
|
2月前
|
SQL 分布式计算 大数据
大数据-168 Elasticsearch 单机云服务器部署运行 详细流程
大数据-168 Elasticsearch 单机云服务器部署运行 详细流程
56 2
|
2月前
|
JSON 关系型数据库 API
ElasticSearch 的概念解析与使用方式(二)
ElasticSearch 的概念解析与使用方式(二)
25 1
|
2月前
|
存储 搜索推荐 Java
ElasticSearch 的概念解析与使用方式(一)
ElasticSearch 的概念解析与使用方式(一)
64 1
|
3月前
|
NoSQL 关系型数据库 Redis
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
mall在linux环境下的部署(基于Docker容器),docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongodb、minio详细教程,拉取镜像、运行容器
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
|
4月前
|
存储 运维 搜索推荐
运维开发.索引引擎ElasticSearch.倒序索引的概念
运维开发.索引引擎ElasticSearch.倒序索引的概念
53 1
|
4月前
|
Kubernetes 容器 Perl
k8s 部署 elasticsearch 单节点
k8s 部署 elasticsearch 单节点
|
4月前
|
JSON 测试技术 API
黑马商城 Elasticsearch从入门到部署 RestClient操作文档
这篇文章详细介绍了如何使用Java的RestHighLevelClient客户端与Elasticsearch进行文档操作,包括新增、查询、删除、修改文档以及批量导入文档的方法,并提供了相应的代码示例和操作步骤。
|
4月前
|
JSON 自然语言处理 Java
Elasticsearch从入门到部署 文档操作 RestAPI
这篇文章详细介绍了Elasticsearch中文档的增删改查操作,并通过Java的RestHighLevelClient客户端演示了如何通过REST API与Elasticsearch进行交云,包括初始化客户端、索引库的创建、删除和存在性判断等操作。
下一篇
无影云桌面