Elasticsearch基础篇之安装和基础使用

Elasticsearch基础篇之安装和基础使用ElasticSearc 软件和基础使用 es 安装

大家好,欢迎来到IT知识分享网。

第一章:基础篇

1、ES的安装

Elasticsearch软件
1.1、下载地址

https://www.elastic.co/cn/downloads/elasticsearch

http://www.elastic.show:9084/download/Elasticsearch/

1.2、目录结构
目录名称 描述
bin 可执行脚本文件,包括启动elasticsearch服务、插件管理、函数命令等。
config 配置文件目录,如elasticsearch配置、角色配置、jvm配置等。
lib elasticsearch所依赖的java库。
data 默认的数据存放目录,包含节点、分片、索引、文档的所有数据,生产环境要求必须修改。
logs 默认的日志文件存储路径,生产环境务必修改。
modules 包含所有的Elasticsearch模块,如Cluster、Discovery、Indices等。
plugins 已经安装的插件的目录。
jdk/jdk.app 7.0以后才有,自带的java环境。
1.3、运行
Windows Linux MacOS
命令行 cd elasticsearch\bin .\elasticsearch -d cd elasticsearch/bin ./elasticsearch -d cd elasticsearch/bin ./elasticsearch -d
图形界面 在bin目录下双击elasticsearch.bat 在bin目录下双击elasticsearch
Shell start elasticsearch\bin\elasticsearch.bat open elasticsearch/bin/elasticsearch

验证服务启动成功:https://localhost:9200

重置ES的密码:

Elasticsearch环境:

操作系统 命令
Linux/MacOS ./bin/elasticsearch -E path.data=data -E path.logs=logs -E node.name=node1 -E cluster.name=esCluster -d
./bin/elasticsearch -E path.data=data1 -E path.logs=logs1 -E node.name=node2 -E cluster.name=esCluster -d
./bin/elasticsearch -E path.data=data2 -E path.logs=logs2 -E node.name=node3 -E cluster.name=esCluster -d

Windows .\elasticsearch.bat -E path.data=data1 -E path.logs=log1 -E node.name=node1 -E cluster.name=msb_teach .\elasticsearch.bat -E path.data=data2 -E path.logs=log2 -E node.name=node1 -E cluster.name=msb_teach

在本机多个项目启动多个单节点:

操作系统 脚本
MacOS open /node1/bin/elasticsearch open /node2/bin/elasticsearch open /node3/bin/elasticsearch
windows start D:\node1\bin\elasticsearch.bat start D:\node2\bin\elasticsearch.bat start D:\node3\bin\elasticsearch.bat
1.4、遇到问题解决

1.账号密码的设置问题???

2.http访问访问es地址问题???

2、kibana-ES操作工具

2.1、下载地址

https://www.elastic.co/cn/downloads/kibana

http://www.elastic.show:9084/download/Kibana/

2.2、运行

启动服务:(从版本6.0.0开始,Kibana仅支持64位操作系统。)

Windows Linux MacOS
命令行 cd kibana\bin .\kibana.bat cd kibana/bin ./kibana cd kibana/bin ./kibana
图形界面 在bin目录下双击kibana.bat 在bin目录下双击kibana
Shell start kibana\bin\kibana.bat open kibana/bin/kibana

验证服务启动成功:http://localhost:5601

配置elasticsearch服务的地址:kibana.yml 》elasticsearch.hosts: [“http://localhost:9200”]

命令行关闭kibana:

​ 关闭窗口ps -ef | grep 5601 或者 ps -ef | grep kibana 或者 lsof -i :5601kill -9 pid

2.3、遇到问题解决

关于“Kibana server is not ready yet” 问题的原因及解决办法

​ 2.3.1、Kibana和Elasticsearch的版本不兼容。解决办法:保持版本一致

​ 2.3.2、Elasticsearch的服务地址和Kibana中配置的elasticsearch.hosts不同解决办法:修改kibana.yml中的elasticsearch.hosts配置

​ 2.3.3、Elasticsearch中禁止跨域访问解决办法:在elasticsearch.yml中配置允许跨域

​ 2.3.4、服务器中开启了防火墙解决办法:关闭防火墙或者修改服务器的安全策略

​ 2.3.5、Elasticsearch所在磁盘剩余空间不足90%解决办法:清理磁盘空间,配置监控和报警

3、Elasticsearch-Head 节点监控

3.1、下载地址
  1. 安装依赖:

    (1) 下载node:

    ​ ① 下载地址:https://nodejs.org/en/download/

    ​ ② 检查是否安装成功:Win+R CMD输入“node -v”命令检查,如果输出了版本号,则node安装成功。

    (2) 安装grunt:

    ​ ① CMD中执行“npm install -g grunt-cli”命令等待安装完成

    ​ ② 输入:grunt -version命令检查是否安装成功

3.2、运行
(1).下载Head插件(1) 下载地址:https://github.com/mobz/elasticsearch-head (2) 下载完成后,解压,打开elasticsearch-head-master文件夹,修改Gruntfile.js文件,添加hostname:'*' (3) 输入 cd elasticsearch-head npm install (4) 输入 npm run start 启动服务 (5) 验证:http://localhost:9100/ 安装成功 (6) 如果无法发现ES节点,尝试在ES配置文件中设置允许跨域http.cors.enabled: truehttp.cors.allow-origin: "*" (7) 从Chrome网上应用店安装Elasticsearch Head (8) 集群的健康值检查 Green:所以的Primary金额Replica均为active,集群蒋康 Yellow:至少一个Replica不可用,但是素有的Primary均为active,数据仍然可以保持 Red:至少有一个Primary为不可用状态,数据不完整,集群不可用。 (9) 健康值检查: ① _cat/health ② _cluster/health 

4、ES的基础使用

4.1、核心概念
1、节点

每个节点就是一个Elasticsearch的实例,一个节点≠一台服务器

2、节点
master:候选节点 data:数据节点 data_content:数据内容节点 data_hot:热节点 data_warm:索引不再定期更新,但仍可查询 data_code:冷节点,只读索引 Ingest:预处理节点,作用类似于Logstash中的Filter ml:机器学习节点 remote_cluster_client:候选客户端节点 transform:转换节点 voting_only:仅投票节点 
4.2、基础使用
1、ES的CRUD
创建索引

PUT product/_doc/1

{“name”:“手机”}

删除索引

DELETE product

修改索引

POST product/_update

查询索引

GET product/_search

2、映射mapping
2.1、mapping概念

ES中的mapping有点类似与RDB中“表结构”的概念,在MySQL中,表结构里包含了字段名称,字段的类型还有索引信息等。在Mapping里也包含了一些属性,比如字段名称、类型、字段使用的分词器、是否评分、是否创建索引等属性,并且在ES中一个字段可以有对个类型。

2.2、查看mapping
GET index/_mapping 
2.3、ES的数据类型

​ ① 常见类型

​ 1) 数字类型:

​ long integer short byte double float half_float scaled_float unsigned_long

​ 2) Keywords:

​ keyword:适用于索引结构化的字段,可以用于过滤、排序、聚合。keyword类型的字段只能通过精确值(exact value)搜索到。Id应该用keyword

​ constant_keyword:始终包含相同值的关键字字段

​ wildcard:可针对类似grep的通配符查询优化日志行和类似的关键字值

​ 关键字字段通常用于排序, 汇总和Term查询,例如term。

​ 3) Dates(时间类型):包括date和 date_nanos

​ 4) alias:为现有字段定义别名。

​ 5) binary(二进制):binary

​ 6) range(区间类型):integer_range、float_range、long_range、double_range、date_range

​ 7) text:当一个字段是要被全文搜索的,比如Email内容、产品描述,这些字段应该使用text类型。设置text类型以后,字段内容会被分析,在生成倒排索 引以前,字符串会被分析器分成一个一个词项。text类型的字段不用于排序,很少用于聚合。(解释一下为啥不会为text创建正排索引:大量堆空间,尤其是 在加载高基数text字段时。字段数据一旦加载到堆中,就在该段的生命周期内保持在那里。同样,加载字段数据是一个昂贵的过程,可能导致用户遇到延迟问 题。这就是默认情况下禁用字段数据的原因)

​ ② 对象关系类型:

​ 1) object:用于单个JSON对象

​ 2) nested:用于JSON对象数组

​ 3) flattened:允许将整个JSON对象索引为单个字段。

​ ③ 结构化类型:

​ 1) geo-point:纬度/经度积分

​ 2) geo-shape:用于多边形等复杂形状

​ 3) point:笛卡尔坐标点

​ 2) shape:笛卡尔任意几何图形

​ ④ 特殊类型:

​ 1) IP地址:ip 用于IPv4和IPv6地址

​ 2) completion:提供自动完成建议

​ 3) tocken_count:计算字符串中令牌的数量

​ 4) murmur3:在索引时计算值的哈希并将其存储在索引中

​ 5) annotated-text:索引包含特殊标记的文本(通常用于标识命名实体)

​ 6) percolator:接受来自query-dsl的查询

​ 7) join:为同一索引内的文档定义父/子关系

​ 8) rank features:记录数字功能以提高查询时的点击率。

​ 9) dense vector:记录浮点值的密集向量。

​ 10) sparse vector:记录浮点值的稀疏向量。

​ 11) search-as-you-type:针对查询优化的文本字段,以实现按需输入的完成

​ 12) histogram:histogram 用于百分位数聚合的预聚合数值。

​ 13) constant keyword:keyword当所有文档都具有相同值时的情况的 专业化。

​ ⑤ array(数组):在Elasticsearch中,数组不需要专用的字段数据类型。默认情况下,任何字段都可以包含零个或多个值,但是,数组中的所有值都必须具有 相同的数据类型。

​ ⑥新增:

​ 1) date_nanos:date plus 纳秒

​ 2) features:

2.4、两种映射
  • Dynamic field mapping:
    • 整数 => long
    • 浮点数 => float
    • true || false => boolean
    • 日期 => date
    • 数组 => 取决于数组中的第一个有效值
    • 对象 => object
    • 字符串 => 如果不是数字和日期类型,那会被映射为text和keyword两个类型

      除了上述字段类型之外,其他类型都必须显示映射,也就是必须手工指定,因为其他类型ES无法自动识别。

    // 设置mapping PUT /product_mapping/_doc/1 { 
          "name": "xiaomi phone", "desc": "shouji zhong de zhandouji", "count": , "price": 123.123, "date": "2020-05-20", "isdel": false, "tags": [ "xingjiabi", "fashao", "buka" ] } // 删除mapping DELETE product_mapping // 查询mapping GET product_mapping/_mapping 
  • Expllcit field mapping:手动映射 – fields的mapping只能创建,无法修改)
    PUT /product { 
          "mappings": { 
          "properties": { 
          "count": { 
          // 数量 "type": "long" }, "date": { 
          // 日期 "type": "date" }, "desc": { 
          "type": "text", // 文本可以全文搜索 "fields": { 
          "keyword": { 
          // 关键词搜索 "type": "keyword", "ignore_above": 256 } } }, "isdel": { 
          "type": "boolean" // 布尔类型 }, "name": { 
          "type": "text", "fields": { 
          "keyword": { 
          "type": "keyword", "ignore_above": 256 } } }, "price": { 
          "type": "float" // 浮点型 }, "tags": { 
          "type": "text", "fields": { 
          "keyword": { 
          "type": "keyword", "ignore_above": 256 }}}}}} 
2.5、映射参数

index:是否对创建对当前字段创建倒排索引,默认true,如果不创建索引,该字段不会通过索引被搜索到,但是仍然会在source元数据中展示

​ ② analyzer:指定分析器(character filter、tokenizer、Token filters)。

​ ③ boost:对当前字段相关度的评分权重,默认1

​ ④ coerce:是否允许强制类型转换 true “1”=> 1 false “1”=< 1

​ ⑤ copy_to:该参数允许将多个字段的值复制到组字段中,然后可以将其作为单个字段进行查询

​ ⑥ doc_values:为了提升排序和聚合效率,默认true,如果确定不需要对字段进行排序或聚合,也不需要通过脚本访问字段值,则可以禁用doc值以节省磁盘 空间(不支持text和annotated_text)

​ ⑦ dynamic:控制是否可以动态添加新字段

​ 1) true 新检测到的字段将添加到映射中。(默认)

​ 2) false 新检测到的字段将被忽略。这些字段将不会被索引,因此将无法搜索,但仍会出现在_source返回的匹配项中。这些字段不会添加到映射中,必须显式 添加新字段。

​ 3) strict 如果检测到新字段,则会引发异常并拒绝文档。必须将新字段显式添加到映射中

​ ⑧ eager_global_ordinals:用于聚合的字段上,优化聚合性能。

​ 1) Frozen indices(冻结索引):有些索引使用率很高,会被保存在内存中,有些使用率特别低,宁愿在使用的时候重新创建,在使用完毕后丢弃数据, Frozen indices的数据命中频率小,不适用于高搜索负载,数据不会被保存在内存中,堆空间占用比普通索引少得多,Frozen indices是只读的,请求可能 是秒级或者分钟级。*eager_global_ordinals不适用于Frozen indices*

​ ⑨ enable:是否创建倒排索引,可以对字段操作,也可以对索引操作,如果不创建索引,让然可以检索并在_source元数据中展示,谨慎使用,该状态无法修改。

 PUT my_index { "mappings": { "enabled": false } } 

​ ⑩ fielddata:查询时内存数据结构,在首次用当前字段聚合、排序或者在脚本中使用时,需要字段为fielddata数据结构,并且创建倒排索引保存到堆中

​ ⑪ fields:给field创建多字段,用于不同目的(全文检索或者聚合分析排序)

​ ⑫ format:格式化

 "date": { "type": "date", "format": "yyyy-MM-dd" } 

​ ⑬ ignore_above:超过长度将被忽略

​ ⑭ ignore_malformed:忽略类型错误

​ ⑮ index_options:控制将哪些信息添加到反向索引中以进行搜索和突出显示。仅用于text字段

​ ⑯ Index_phrases:提升exact_value查询速度,但是要消耗更多磁盘空间

​ ⑰ Index_prefixes:前缀搜索

​ 1) min_chars:前缀最小长度,>0,默认2(包含)

​ 2) max_chars:前缀最大长度,<20,默认5(包含)

​ ⑱ meta:附加元数据

​ ⑲ normalizer:

​ ⑳ norms:是否禁用评分(在filter和聚合字段上应该禁用)。

​ 21 null_value:为null值设置默认值

​ 22 position_increment_gap:

​ 23 proterties:除了mapping还可用于object的属性设置

​ 24 search_analyzer:设置单独的查询时分析器

​ 25 similarity:为字段设置相关度算法,支持BM25、claassic(TF-IDF)、boolean

​ 26 store:设置字段是否仅查询

​ 27 term_vector:运维参数

3、搜索与查询
查询上下文

​ 使用query关键字进行检索,倾向于相关度搜索,故需要计算评分。搜索是Elasticsearch最关键和重要的部分。

相关度评分:_score

​ 概念:相关度评分用于对搜索结果排序,评分越高则认为其结果和搜索的预期值相关度越高,即越符合搜索预期值。在7.x之前相关度评分默认使用TF/IDF算法计算而来,7.x之后默认为BM25。在核心知识篇不必关心相关评分的具体原理,只需知晓其概念即可。

​ 排序:相关度评分为搜索结果的排序依据,默认情况下评分越高,则结果越靠前。

元数据:_source
禁用_source: 1. 好处:节省存储开销 2. 坏处: - 不支持update、update_by_query和reindex API- 不支持高亮。 - 不支持reindex、更改mapping分析器和版本升级。 - 通过查看索引时使用的原始文档来调试查询或聚合的功能。 - 将来有可能自动修复索引损坏。 总结:如果只是为了节省磁盘,可以压缩索引比禁用_source更好。 数据源过滤器: Including:结果中返回哪些field Excluding:结果中不要返回哪些field,不返回的field不代表不能通过该字段进行检索,因为元数据不存在不代表索引不存在 1. 在mapping中定义过滤:支持通配符,但是这种方式不推荐,因为mapping不可变 PUT product { 
    "mappings": { 
    "_source": { 
    "includes": [ "name", "price" ], "excludes": [ "desc", "tags" ] } } } 2. 常用过滤规则 - "_source": "false", - "_source": "obj.*", - "_source": [ "obj1.\*", "obj2.\*" ], - "_source": { 
    "includes": [ "obj1.\*", "obj2.\*" ], "excludes": [ "*.description" ] } 
3.1、Query String
查询所有

GET /product/_search

带参数查询

GET product/_search?q=name:xiaomi

分页查询
GET product/_search?from=1&size=3&sort=name.keyword:desc GET product/_search?from=1&size=3&sort=price:asc from-开始,size-大小,sort-排序:字符串需要加keyword 
精准匹配-exact value

GET product/_search?q=date:2021-06-01

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/112024.html

(0)
上一篇 2026-01-21 10:00
下一篇 2026-01-21 10:15

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信