热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Elasticsearch上手指南

目录ElasticStack及Elasticsearch介绍Elasticsearch安装Elasticsearch入门Elasticsearch配置ElasticsearchRE


目录


  1. ElasticStack及Elasticsearch介绍


  2. Elasticsearch安装


  3. Elasticsearch入门


  4. Elasticsearch配置


  5. Elasticsearch REST API


  6. Elasticsearch .NET客户端


  7. 附录


 
ElasticStack及Elasticsearch介绍
 
官方网站:https://www.elastic.co/
 
Elastic Stack (旧称ELK Stack): Elasticsearch + Logstash + Kibana + Beats (New)
 
Elastic Stack组件:


  • Elasticsearch


            搜索、分析和存储数据。Elasticsearch是一个基于JSON的分布式搜索和分析引擎,专为水平可扩展性,最高可靠性和易管理性而设计。


  • Logstash


            Logstash是一个动态数据收集管道,具有可扩展的插件生态系统和强大的Elasticsearch协同作用。


  • Kibana


            可视化您的数据。 导航弹性堆栈。Kibana为您的数据提供了可视化,是用于配置和管理Elastic Stack各个方面的可扩展用户界面。


  • Beats


            Beats是轻量级数据运送平台,可将边缘机器的数据发送到Logstash和Elasticsearch。
 
Elasticsearch安装
 
最新版本为Elasticsearch 6.5.4 GA Release,Windows下载安装包如下:
zip: https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.5.4.zip
msi: https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.5.4.msi (105MB)
 
安装条件:64位Java虚拟机
 


  • 选项1(较慢):下载并安装JRE: https://www.oracle.com/technetwork/java/javase/overview/index.html


  • 选项2(快):可以先安装chocolatey,再通过chocolatey安装Java SE Runtime


 
安装步骤:
 


  1. 下载并解压缩Elasticsearch


  2. 运行bin\elasticsearch.exe


  3. 使用浏览器访问http://localhost:9200


 


配置ES使用JVM分配的内存堆(Heap)
对于小型部署来说1G足够,最大不应超过内存的50%
 



 

 
安装成功验证画面

 
 
Elasticsearch入门
 
Elasticsearch是一个高度可扩展的开源全文搜索和分析引擎。 它允许您快速,近实时地存储,搜索和分析大量数据。 它通常用作底层引擎/技术,为具有复杂搜索功能和要求的应用程序提供支持。
 
以下是Elasticsearch可用于的一些示例用例:
 


  • 您经营一家在线网上商店,您可以让客户搜索您销售的产品。在这种情况下,您可以使用Elasticsearch存储整个产品目录和库存,并为它们提供搜索和自动填充建议。


 


  • 您希望收集日志或交易数据,并且希望分析和挖掘此数据以查找趋势,统计信息,摘要或异常。在这种情况下,您可以使用Logstash(Elasticsearch / Logstash / Kibana堆栈的一部分)来收集,聚合和解析数据,然后让Logstash将此数据提供给Elasticsearch。一旦数据在Elasticsearch中,您就可以运行搜索和聚合来挖掘您感兴趣的任何信息。


 


  • 您运行价格警报平台,允许精通价格的客户指定一条规则,例如“我有兴趣购买特定的电子产品,如果小工具的价格在下个月内从任何供应商降至X美元以下,我希望收到通知” 。在这种情况下,您可以刮取供应商价格,将其推入Elasticsearch并使用其反向搜索(Percolator)功能来匹配价格变动与客户查询,并最终在发现匹配后将警报推送给客户。


 


  • 您有分析/业务智能需求,并希望快速调查,分析,可视化并询问有关大量数据的特定问题(想想数百万或数十亿条记录)。在这种情况下,您可以使用Elasticsearch存储数据,然后使用Kibana(Elasticsearch / Logstash / Kibana堆栈的一部分)构建自定义仪表板,以便可视化对您来说重要的数据方面。此外,您可以使用Elasticsearch聚合功能针对您的数据执行复杂的商业智能查询。


 
基本概念
 


  • NRT(接近实时)


            Elasticsearch是一个近实时搜索平台。 这意味着从索引文档到可搜索文档的时间有一点延迟(通常为一秒)。
 


  • Cluster(集群) —— 按应用或业务,如HR、法务


            集群是一个或多个节点(服务器)的集合,它们共同保存您的整个数据,并提供跨所有节点的联合索引和搜索功能。 群集由唯一名称标识,默认情况下为“elasticsearch”。 此名称很重要,因为如果节点设置为按名称加入群集,则该节点只能是群集的一部分。
 


  • Node(节点) —— 按物理服务器


            节点是作为群集一部分的单个服务器,存储数据并参与群集的索引和搜索功能。 就像集群一样,节点由名称标识,默认情况下,该名称是在启动时分配给节点的随机通用唯一标识符(UUID)。 如果不需要默认值,可以定义所需的任何节点名称。
 


  • Index(索引)  ——  按业务领域,如订单、合同、交易记录


            索引是具有某些类似特征的文档集合。 例如,您可以拥有客户数据的索引,产品目录的另一个索引以及订单数据的另一个索引。 索引由名称标识(必须全部小写),此名称用于在对其中的文档执行索引,搜索,更新和删除操作时引用索引。
 


  • Type(类型) —— 6.0.0已弃用


  • Document(文档)


            文档是可以编制索引的基本信息单元。 例如,您可以为单个客户提供文档,为单个产品提供另一个文档,为单个订单提供另一个文档。 该文档以JSON(Javascript Object Notation)表示,JSON是一种普遍存在的互联网数据交换格式。在索引/类型中,您可以根据需要存储任意数量的文档。 请注意,尽管文档实际上驻留在索引中,但实际上必须将文档编入索引/分配给索引中的类型。
 


  • Shards & Replicas (分片和复制)


            为了解决这个问题,Elasticsearch提供了将索引细分为多个称为分片的功能。 创建索引时,只需定义所需的分片数即可。 每个分片本身都是一个功能齐全且独立的“索引”,可以托管在集群中的任何节点上。
            分片很重要,主要有两个原因:



    • 允许水平拆分/扩展索引容量


    • 允许跨分片(可能在多个节点上)分布和并行化操作,从而提高性能/吞吐量



            分片的分布方式以及如何将其文档聚合回搜索请求的机制完全由Elasticsearch管理,对用户而言是透明的。
            在可以随时发生故障的网络/云环境中,非常有用,强烈建议使用故障转移机制,以防分片/节点以某种方式脱机或因任何原因消失。 为此,Elasticsearch允许您将索引的分片的一个或多个副本制作成所谓的副本分片或简称副本。
 

        主分片和复制分片:
 


  • 此索引包括两个主分片和两个复制分片。你的应用会循环请求各节点。


  • 写请求路由到主分片然后复制分片。


  • 读请求路由到主分片或任何复制分片。


 
Elasticsearch配置
 
ES目录结构
 


  • bin: 运行ES实例和插件管理的脚本


  • lib: ES使用的库文件


  • modules: ES主要模块


  • plugins: ES插件目录


 
安装后可以通过Windows服务来停止或启动Elasticsearch。
 
ES客户端
 


  • curl: 可以通过命令行工具curl与ES交互,Windows下curl下载地址:https://curl.haxx.se/download.html


  • Postman: HTTP请求测试工具


 
Elasticsearch REST API
 
现在我们已经启动并运行了节点(和集群),下一步是了解如何与它进行通信。 幸运的是,Elasticsearch提供了一个非常全面和强大的REST API,您可以使用它与集群进行交互。 使用API可以完成的一些事项如下:


  • 检查群集,节点和索引运行状况,状态和统计信息


  • 管理您的群集,节点和索引数据和元数据


  • 对索引执行CRUD(创建,读取,更新和删除)和搜索操作


  • 执行高级搜索操作,例如分页,排序,过滤,脚本编写,聚合等等


 
查询集群状态:GET http://localhost:9200/_cat/health?v
查询节点状态:GET http://localhost:9200/_cat/nodes?v
查询索引列表:GET http://localhost:9200/_cat/indices?v
 
创建索引customer:PUT  http://localhost:9200/customer?pretty
索引文档:PUT http://localhost:9200/customer/_doc/1?pretty
{
"name": "John Doe"
}
 
查询文档:GET http://localhost:9200/customer/_doc/1?pretty
删除索引:DELETE http://localhost:9200/customer?pretty
 
基本语法: ///
 
更新/创建索引(带文档ID):PUT http://localhost:9200/customer/_doc/1?pretty
创建索引(不带文档ID):POST  http://localhost:9200/customer/_doc?pretty
 
更新文档内容:POST http://localhost:9200/customer/_doc/1?pretty
{
  "script" : "ctx._source.age += 5"
}
 
删除文档:DELETE http://localhost:9200/customer/_doc/2?pretty
 
Elasticsearch .NET客户端
 
Elasticsearch的.NET客户端包括Elasticsearch.Net和NEST:
 


  • Elasticsearch.Net - 底层客户端


            https://www.elastic.co/guide/en/elasticsearch/client/net-api/current/elasticsearch-net-getting-started.html


  • NEST (推荐使用) - 高级客户都


            https://www.elastic.co/guide/en/elasticsearch/client/net-api/current/nest-getting-started.html
 
Elasticsearch PasS申请流程(CIO)
 
准备材料


  1. Obtain the Name Domain requirements.


  2. Elastic Search Version


  3. Node Configuration



    1. Instance Count


    2. Instance Type



  4. Storage Configuration



    1. Storage Type


    2. Volume Type


    3. Volume Size



  5. Snaposhot Configuration


申请流程


  1. Application team submits an Infrastructure Architecture type RITM to ED (INFRADELV-OPER-CIOENVDELV).


The ticket contains the requirements above. (See I. Requirements)


  1. ED assignee submits a CHG to ID (INFRADELV-CIO-Infrastructure Design) for TA357 update.


  2. ED assignee creates the AWS ElasticSearch in AWS.


  3. Application team verifies the configuration and provides sign off.


 
CIO Elasticsearch服务创建负责:ED Team
AWS Elasticsearch服务版本:5.3 (可以跟ED确认)
服务实例命名规则:AppName-AIRID-ENV
 
流程

 
访问控制可通过CAPP申请,如开通EC2访问ES的权限(resource based permissions)
CAPP: https://ciocloudaccess.accenture.com/
 
附录
 
参考链接:
 


  • Elasticsearch安装及配置(旧版本): http://blog.csdn.net/tzhuwb/article/details/77430815


  • Head插件(Web IDE):http://blog.csdn.net/qq3401247010/article/details/78742524


  • PHP客户端: https://github.com/wizacha/AwsSignatureMiddleware


  • PHP创建/搜索/删除索引数据:https://www.cnblogs.com/life_lt/p/6122767.html



推荐阅读
  • 您的数据库配置是否安全?DBSAT工具助您一臂之力!
    本文探讨了Oracle提供的免费工具DBSAT,该工具能够有效协助用户检测和优化数据库配置的安全性。通过全面的分析和报告,DBSAT帮助用户识别潜在的安全漏洞,并提供针对性的改进建议,确保数据库系统的稳定性和安全性。 ... [详细]
  • 2020年9月15日,Oracle正式发布了最新的JDK 15版本。本次更新带来了许多新特性,包括隐藏类、EdDSA签名算法、模式匹配、记录类、封闭类和文本块等。 ... [详细]
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
  • 本文详细介绍了Java代码分层的基本概念和常见分层模式,特别是MVC模式。同时探讨了不同项目需求下的分层策略,帮助读者更好地理解和应用Java分层思想。 ... [详细]
  • Python 数据可视化实战指南
    本文详细介绍如何使用 Python 进行数据可视化,涵盖从环境搭建到具体实例的全过程。 ... [详细]
  • 解决Bootstrap DataTable Ajax请求重复问题
    在最近的一个项目中,我们使用了JQuery DataTable进行数据展示,虽然使用起来非常方便,但在测试过程中发现了一个问题:当查询条件改变时,有时查询结果的数据不正确。通过FireBug调试发现,点击搜索按钮时,会发送两次Ajax请求,一次是原条件的请求,一次是新条件的请求。 ... [详细]
  • V8不仅是一款著名的八缸发动机,广泛应用于道奇Charger、宾利Continental GT和BossHoss摩托车中。自2008年以来,作为Chromium项目的一部分,V8 JavaScript引擎在性能优化和技术创新方面取得了显著进展。该引擎通过先进的编译技术和高效的垃圾回收机制,显著提升了JavaScript的执行效率,为现代Web应用提供了强大的支持。持续的优化和创新使得V8在处理复杂计算和大规模数据时表现更加出色,成为众多开发者和企业的首选。 ... [详细]
  • 在处理大图片时,PHP 常常会遇到内存溢出的问题。为了避免这种情况,建议避免使用 `setImageBitmap`、`setImageResource` 或 `BitmapFactory.decodeResource` 等方法直接加载大图。这些函数在处理大图片时会消耗大量内存,导致应用崩溃。推荐采用分块处理、图像压缩和缓存机制等策略,以优化内存使用并提高处理效率。此外,可以考虑使用第三方库如 ImageMagick 或 GD 库来处理大图片,这些库提供了更高效的内存管理和图像处理功能。 ... [详细]
  • 华为捐赠欧拉操作系统,承诺不推商用版
    华为近日宣布将欧拉开源操作系统捐赠给开放原子开源基金会,并承诺不会推出欧拉的商用发行版。此举旨在推动欧拉和鸿蒙操作系统的全场景融合与生态发展。 ... [详细]
  • 深入解析 Lifecycle 的实现原理
    本文将详细介绍 Android Jetpack 中 Lifecycle 组件的实现原理,帮助开发者更好地理解和使用 Lifecycle,避免常见的内存泄漏问题。 ... [详细]
  • 秒建一个后台管理系统?用这5个开源免费的Java项目就够了
    秒建一个后台管理系统?用这5个开源免费的Java项目就够了 ... [详细]
  • 本文深入探讨了NoSQL数据库的四大主要类型:键值对存储、文档存储、列式存储和图数据库。NoSQL(Not Only SQL)是指一系列非关系型数据库系统,它们不依赖于固定模式的数据存储方式,能够灵活处理大规模、高并发的数据需求。键值对存储适用于简单的数据结构;文档存储支持复杂的数据对象;列式存储优化了大数据量的读写性能;而图数据库则擅长处理复杂的关系网络。每种类型的NoSQL数据库都有其独特的优势和应用场景,本文将详细分析它们的特点及应用实例。 ... [详细]
  • 2021年Java开发实战:当前时间戳转换方法详解与实用网址推荐
    在当前的就业市场中,金九银十过后,金三银四也即将到来。本文将分享一些实用的面试技巧和题目,特别是针对正在寻找新工作机会的Java开发者。作者在准备字节跳动的面试过程中积累了丰富的经验,并成功获得了Offer。文中详细介绍了如何将当前时间戳进行转换的方法,并推荐了一些实用的在线资源,帮助读者更好地应对技术面试。 ... [详细]
  • Java测试服务器调试指南详细介绍了如何进行远程调试,并深入解析了Java Xdebug参数的使用方法。本文首先概述了Java内置的调试功能,重点介绍了JDB这一类似于GDB的强大调试工具。通过实例演示,读者可以掌握在测试环境中高效调试Java应用程序的技巧,包括配置远程调试环境和优化调试参数,以提高开发效率和代码质量。 ... [详细]
  • 分布式开源任务调度框架 TBSchedule 深度解析与应用实践
    本文深入解析了分布式开源任务调度框架 TBSchedule 的核心原理与应用场景,并通过实际案例详细介绍了其部署与使用方法。首先,从源码下载开始,详细阐述了 TBSchedule 的安装步骤和配置要点。接着,探讨了该框架在大规模分布式环境中的性能优化策略,以及如何通过灵活的任务调度机制提升系统效率。最后,结合具体实例,展示了 TBSchedule 在实际项目中的应用效果,为开发者提供了宝贵的实践经验。 ... [详细]
author-avatar
_韩文清_霸图V
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有