ElasticSearch是基于开源企业REST的实时搜索和分析引擎。 它的核心搜索功能是使用Apache Lucene构建的,但支持许多其他功能。
它是用Java语言编写的。 它支持实时存储,索引,搜索和分析数据。 像MongoDB一样,ElasticSearch也是基于文档的NoSQL数据存储。
注意
ElasticSearch网站: www.elastic.co 。 ElasticSearch的最新版本是5.2.1,于2017年2月14日发布。
ElasticSearch功能:-
- 开源
- 支持全文本简单而强大的搜索
- 支持基于REST的API(HTTP上的JSON)
- 支持实时搜索和分析
- 根据定义,分布式
- 支持多租户功能
- 支持云和大数据环境
- 支持跨平台
- 非规范化NoSQL数据存储
ElasticSearch的优缺点:
- 开源
- REST API轻巧
- 高度可用。 轻松且高度可扩展
- 支持缓存数据
- 无架构
- 快速搜索性能
- 支持结构化和非结构化数据
- 支持分布式,分片,复制,群集和多节点体系结构
- 支持批量操作
- 立即构建图表和仪表板
ElasticSearch的缺点或局限性:-
- 不支持MapReduce操作
- 不能用作主要数据存储
- 不是符合ACID的数据存储
- 不支持交易和分布式交易
- 没有内置的身份验证或授权功能
正在使用ElasticSearch的热门客户端:-
- Github.com,Quora.com,Stackoverflow.com
- eBay,DELL,思科,Mozilla,Wikimedia
- Netflix,Symatics,Facebook
- 英国HMRC(英国税务与海关总署)
例如,Github.com使用ElasticSearch来搜索文件,历史记录,票证编号等。大多数公司使用ELK堆栈来管理其日志并监视其系统。 ELK代表ElasticSearch Logstash和Kibana。
注意
您可以在https://www.elastic.co/use-cases中找到更多客户的用例。
1.在本地安装ElasticSearch
注意
众所周知,ElasticSearch是用Java编写的。 因此,我们应该在系统路径中包含Java / JRE才能使用它。 请正确安装和设置Java Environment。
要将ElasticSearch安装到本地文件系统,请按照以下说明进行操作。
1.1从https://www.elastic.co/downloads/elasticsearch下载ElasticSearch
1.2 Windows
- 将Zip文件下载并解压缩到本地文件系统:elasticsearch-5.2.1.zip
- 将Zip文件提取到F:\ elasticsearch-5.2.1
- 设置环境变量
PATH = F:\elasticsearch-5.2.1\bin
- 启动ElasticSearch
F:/>elasticsearch.bat
- 从浏览器使用http:// localhost:9200访问ElasticSearch。 我们可以使用Ctrl + C从CMD提示符处停止ElasticSearch。
1.3 Ubuntu Linux:使用tar文件安装
- 下载Tar文件并将其解压缩到本地文件系统
tar -xvf elasticsearch-5.2.1.tar.gz
- 启动ElasticSearch
$ ./elasticsearch
- 从浏览器使用http:// localhost:9200访问ElasticSearch
1.4 Ubuntu Linux:使用命令安装
- 执行以下命令以下载ElasticSearch
$ sudo wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.2.1.deb
它会下载ElasticSearch DEB文件:elasticsearch-5.2.1.deb
- 执行以下dpkg命令以安装ElasticSearch
$ sudo dpkg -i elasticsearch-5.2.1.deb
默认情况下,它将ElasticSearch安装在“ / usr / share / elasticsearch”。
- 启动ElasticSearch
$ ./elasticsearch
- 从浏览器使用http:// localhost:9200访问ElasticSearch
注意
ElasticSearch的默认端口号是9200
。 如果需要,我们可以更改此端口号。1.5启动ElasticSearch后,访问默认URL,我们将获得以下默认响应
Browser : http://localhost:9200{ "name" : "rBvi0Hs", "cluster_name" : "elasticsearch", "cluster_uuid" : "kOQQ_nqfTW-b4vQ00XSvdg", "version" : { "number" : "5.2.1", "build_hash" : "db0d481", "build_date" : "2017-02-09T22:05:32.386Z", "build_snapshot" : false, "lucene_version" : "6.4.1" }, "tagline" : "You Know, for Search" }
注意
您可以在https://github.com/elastic/elasticsearch中找到ElasticSearch源代码2. ElasticSearch REST API URL基础
ElasticSearch REST API URL应遵循以下格式。
这里
- 服务器是指任何服务器名称或主机名,例如“ myserver”。 有时我们使用节点+端口号,例如“ myhost:9999”。
- 索引必须小写,否则将引发异常。
- 建议也以小写形式使用Type。
在接下来的部分中,我们将通过一些示例讨论有关REST API用法和Exception的更多信息。
3. ElasticSearch术语
我们将讨论一些重要的ElasticSearch术语:
Index
,Type
,Document
,Key
,Value
等。3.1什么是ElasticSearch中的索引?
在ElasticSearch中,索引是文档的集合。 例如,“书店”是一个文档。 索引用于索引,搜索,更新和删除文档。 它必须是小写的。索引类似于“关系数据库世界”中的数据库。
3.2 ElasticSearch中的类型是什么?
在ElasticSearch中,类型是相似文档的类别。 这意味着我们可以将一组相似的文档分组为一个类型。 在现实世界中,“书店”包含不同种类的项目:“书”的集合,钢笔,铅笔,CD等的集合。以同样的方式,“书店”文档(一种索引)可以包含类型的集合:书籍,钢笔,CD等。类型类似于“关系数据库世界”中的“表”。
3.3 ElasticSearch中的文档是什么?
在ElasticSearch中,文档是Type的实例。 它包含具有关键和价值博览会的数据。 例如,“ title”:“ Java中的Functional Programming”是Type:“ Books”类型的Document的Key:Value fair。 每个文档都有一个ID。文档类似于关系数据库世界中表中的行。 键是列名,值是列值。
4. ElasticSearch命令基础
众所周知,ElasticSearch支持基于REST的API(基于HTTP协议的JSON)来支持CRUD(创建读取更新删除)操作。 它使用HTTP方法执行其操作。
HTTP请求方式 用法 得到 从ElasticSearch获取或选择或读取数据 开机自检 创建数据或将数据更新到ElasticSearch 放 创建数据或将数据更新到ElasticSearch 删除 从ElasticSearch删除或删除现有数据 注意
要测试ElasticSearch Operations,我们可以使用任何REST客户端,例如POSTMAN,Fiddler,CURL命令,Sense等。我将使用Google Chrome POSTMAN探索ElasticSearch REST API。 您可以将POSTMAN或Sense安装为Chrome扩展程序。5. ElasticSearch CRUD操作
让我们使用ElasticSearch为Mkyong.com网站开发搜索功能,以搜索帖子详细信息,作者详细信息等。
5.1创建操作示例
要使用/mkyong/posts/1001
和以下请求数据插入新文档:{ "title": "Java 8 Optional In Depth", "category":"Java", "published_date":"23-FEB-2017", "author":"Rambabu Posa" }
这里1001是文档ID。 它用于唯一地标识它。
描述:-
- 要创建新文档,我们使用HTTP POST请求方法。
- 我们的节点:端口号:http:// localhost:9200
- 索引名称:mkyong
- 类型名称:帖子
- 作为Request正文类型为JSON或添加请求标头:“ Content-Type”:“ application / json”
- 单击“发送”按钮进行响应。
- 我们可以在Response数据中观察以下Key:Value对。
"_index":"mkyong" "_type":"posts" "result":"created" "created":true
- 我们可以在CMD提示符下观察以下日志。
[2017-02-26T21:10:33,941][INFO ][o.e.c.m.MetaDataCreateIndexService] [aH4GiIP] [mkyong] creating index, cause [auto(index api)], templates [], shards [5]/[1], mappings [] [2017-02-26T21:10:35,790][INFO ][o.e.c.m.MetaDataMappingService] [aH4GiIP] [mkyong/KJsGZgF-Try0k4OHWAgARQ] create_mapping [posts]
请以相同的方式插入以下文档:
"/mkyong/posts/1002" { "title": "Elastic Search Basics", "category":"ElasticSearch", "published_date":"03-MAR-2017", "author":"Rambabu Posa" } "/mkyong/posts/1003" { "title": "Spring + Spring Data + ElasticSearch", "category":"Spring", "published_date":"11-MAR-2017", "author":"Rambabu Posa" } "/mkyong/posts/1004" { "title": "Spring + Spring Data + ElasticSearch", "category":"Spring Boot", "published_date":"23-MAR-2017", "author":"Rambabu Posa" }
5.2读取操作示例
要从ElasticSearch中读取或查询或选择数据,我们应该在REAT API URL的末尾使用“ _search”。描述:-
- 您可以在URL中观察到“ _search”。
- 响应显示:“总计”:4(找到该索引和类型的总计4条记录。)
5.3使用查询参数的读取操作示例
我们可以使用“?q = : ”中的语法来过滤记录。描述:-
- 我们可以在Response数据中观察以下Key:Value对。 它告诉在此搜索中找到的总共一条记录。
"total":"1" "_id":"1002"
5.4 UPDATE操作示例
想要更新现有的Document数据,如下所示:描述:-
- 我们可以在Response数据中观察以下Key:Value对。 它告诉文档已更新,但未创建。
"result":"updated" "created":"false"
检查同一文件
5.5删除操作示例
想要删除一个_id = 1004
文档描述:-
- 我们可以在Response数据中观察以下Key:Value对。 通知文档已成功删除。
"result":"deleted" "successful":"1"
6.索引必须小写
正如我们所讨论的,Index必须小写。 否则,将引发错误,如下所示:
由于我们不使用小写的索引:“ Mkyong”,因此会抛出一条非常有意义的错误消息:“无效的索引名称[Mkyong],必须为小写”。
注意
类型可能是大写的,但不建议使用。参考文献
翻译自: https://mkyong.com/elasticsearch/elasticsearch-hello-world-example/