您现在的位置是:首页 > 技术文章 > 详情<<文章列表阅读 搜索引擎入门——启动第一个ElasticSearch单机节点 搜索引擎 ES ElasticSearch wjyuian 2019-10-28 364 1 > 地转天旋,万事开头难。 > 斗霜傲雪二十年,堂堂剑气尚寒。 > 戎马倥偬一生,多少失败成功? > 试看大千世界,依旧海阔天空。 其实吧,启动一个单机的`Elasticsearch`(下文称`ES`)节点,非常简单。之所以会有这么一首诗,完全是为了装,贱笑,贱笑了! ### Elasticsearch简介 `ES`是应用非常广泛的分布式搜索引擎和分析引擎。著名的`ELK`中的`E`就是`ES`,`L`指的是`Logstah`,它用于收集数据(日志),`K`指的是`Kibana`,它是一个可视化的操作和分析工具。 `ES`可以为几乎所有类型的数据提供实时搜索和分析功能。无论是结构化数据、非结构化数据、数值型数据、甚至是空间地理数据,`ES`都能以支持快速搜索为前提,有效的对其进行存储和索引。通过它,我们不进行可以进行快速搜索,还能通过聚合、统计等功能来发现数据中隐藏的趋势。`ES`的分布式特性可以很轻松的进行集群扩展,以解决数据量和查询量快速增长带来的问题。 `ES`解决的不仅仅是搜索的问题: + 给我们的网址添加一个搜索框,当然这解决的是基础的搜索问题 + 储存和分析海量数据,比如访问日志、性能指标或其它案例数据 + 可以实时的通过机器学习为用户行为数据进行建模 + 作为业务上自动化工作流的存储引擎 + 作为空间地理信息管理系统(GIS),为空间数据进行管理、集成和分析 + 为其它场景的海量数据查询、分析提供基本能力 使用`ES`的场景千变万化,但是其基本的索引和查询方式都是一样的。 #### 数据输入 作为一个分布式的文档存储引擎,`ES`不会按行(一行包含多列)来存储数据,取而代之的是更为复杂的且序列化过的`JSON`文本。如果你运行的是一个多节的`ES`集群,那么索引数据将会分布在各个节点,而且可以通过任意节点访问到所有数据。 > 为什么这里是JSON,应该是`ES`进行了封装,屏蔽了`Lucene`层面的`Document`和`Field`的概念,最底层还是这些。 当提交一个新的文档到`ES`存储时,几乎可以在一秒内就搜索到这个数据,所以是准实时的。`ES`的索引结构和`Solr`一样,都是倒排索引结构。关于倒排索引的简单结构和功能,可以参考另两篇文章[《搜索引擎入门——什么是中文分词以及它对于搜索引擎的意义》](https://oomabc.com/articledetail?atclid=9500e8e3135b42709439f98780427f8a)和[搜索引擎进阶——Lucene链表操作解析 ](https://oomabc.com/articledetail?atclid=a44bc93b559148e8a30b5a372f632ba3)。 虽然`ES`具有无模式能力,它能自动根据提交的文档中的字段来识别数据类型并选择最优数据结构对其进行索引。官方还是建议针对同一个字段统一数据类型,或者通过规则进行动态映射: + 区分全文的字符串字段和精确数值字符串字段 + 根据不同数据类型进行特殊的文本分析 + 跨类型的匹配性能会有所降低 + 可以使用系统无法检测的数据类型,主要是空间地理位置的信息,比如经纬度值,包括坐标和范围 + 可以使用其他的自定义数据类型 #### 信息输出 基于`Lucene`,`ES`让我们可以轻松使用搜索引擎的完整功能。`ES`提供了一套简单的、标准的`REST`接口,用于管理数据与集群。同时也提供了多种开发语言的工具包,`Java`、`JavaScript`、`Go`、`.NET`、`PHP`、`Perl`、`Python`、`Ruby`。 ##### 搜索数据 `ES`的`REST`接口支持结构化查询、全文的文本查询以及复合查询。 结构化查询: ```JSON { "query" : { "match" : { "cityId" : 30201 } }, "sort" : [ { "annualSalary" : "desc"} ], "from" : 0, "size" : 20, "_source" : ["title", "id", "cityId", "location", "annualSalary", "companyId"] } ``` 全文查询,指定关键字进行匹配,然后根据匹配度进行排序: ```JSON { "query" : { "match" : { "title" : "java 产品经理" } }, "from" : 0, "size" : 20 } ``` ##### 分析数据 除了搜索,还可以使用`ES`中极其极其强大的聚合功能——`aggregate`。通过聚合,不仅可以实现大海捞针的目的,还能得到: + 有多少根针 + 针的平均长度是多少 + 针的长度中位数是多少,制造商统计 + 在过去六个月中,每个月分别有多少针掉到海里 更细致的功能还有: + 制造最多针的制造商排名 + 最长针排名统计,以及各自段位内的制造商排名 聚合利用了搜索引擎的倒排索引结构,因此性能非常高。而且本身搜索和聚合是可以同时使用的,这意味着我们可以根据搜索条件定位一批数据,然后基于这一批数据进行实时聚合。 ### 启动单机节点 #### 下载Linux/MaxOS版本 ```bash wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.4.0-darwin-x86_64.tar.gz wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.4.0-darwin-x86_64.tar.gz.sha512 shasum -a 512 -c elasticsearch-7.4.0-darwin-x86_64.tar.gz.sha512 #1 tar -xzf elasticsearch-7.4.0-darwin-x86_64.tar.gz cd elasticsearch-7.4.0/ #2 ``` > 1:主要是为了对比下载的压缩包的`SHA`值与发布版本的验证值是否一致,正确的输出是:`elasticsearch-{version}-darwin-x86_64.tar.gz: OK`。 > 2:解压之后的根目录。 #### 启动 ```bash ./bin/elasticsearch ``` ##### 以后台方式启动 ```bash ./bin/elasticsearch -d -p pid ``` `-d`表示后台方式运行,`-p`将会输出进程ID。 ##### 停止 ```bash pkill -F pid ``` ### 访问 启动成功之后就可以正常访问`ES`节点了,访问地址`http://localhost:9200/`,可以打开一个页面,显示了节点的基本信息: ```JSON // 20191017194619 // http://localhost:9200/ { "name": "wjyuianMacBookPro", "cluster_name": "elasticsearch", "cluster_uuid": "yENYxaBTRKSI41N_yVmo5w", "version": { "number": "7.3.1", "build_flavor": "default", "build_type": "tar", "build_hash": "4749ba6", "build_date": "2019-08-19T20:19:25.651794Z", "build_snapshot": false, "lucene_version": "8.1.0", "minimum_wire_compatibility_version": "6.8.0", "minimum_index_compatibility_version": "6.0.0-beta1" }, "tagline": "You Know, for Search" } ``` 相关文章 搜索引擎进阶——IK扩展之动态加载与同义词 SpringBoot2从零开始(一)——项目启动 应用算法学习(一)—— TopN算法 搜索引擎进阶——solr自定义function 搜索引擎进阶——Lucene链表操作解析 搜索引擎入门——solr筛选器facet的应用 搜索引擎进阶——关键字预处理模块 搜索引擎入门——启动第一个Solr应用 搜索引擎入门——聊聊schema.xml配置 搜索引擎入门——Solr查询参数详解以及如何使用Java完成对接 栏目导航 关于我 不止技术 工程化应用(23) 技术学习/探索(32) 自娱自乐(2) 还有生活 随便写写(1) 娱乐/放松(1) 点击排行 SpringBoot2从零开始(二)——多数据源配置 搜索引擎进阶——IK扩展之动态加载与同义词 从零开发参数同步框架(二)—— 前期准备之工具类 Nginx的nginx.conf配置部分解释 springMVC中controller参数拦截问题处理 Maven项目一键打包、上传、重启服务器 微信小程序深入踩坑总结 微信小程序的搜索高亮、自定义导航条等踩坑记录 标签云 Java(19) 搜索引擎(13) Solr(7) 参数同步(6) SpringBoot(4) ES(3) ElasticSearch(3) JVM(3) Netty(3) Spring(3) mongoDB(3) 设计模式(3) Curator(2) Docker(2) Dubbo(2) 大家推荐 魔神重返战场!厄祭战争的巴巴托斯:第四形态 搜索引擎入门——Solr查询参数详解以及如何使用Java完成对接 来聊一聊这个被淘汰的图片验证码 搜索引擎入门——聊聊schema.xml配置 搜索引擎入门——启动第一个Solr应用 君子性非异也,善假于物也——功能强大的Postman 择其善而从之——我为什么开始学习ElasticSearch 实现一个关于队列的伪需求是一种怎样的体验