ElasticSearch Hello World示例

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术语: IndexTypeDocumentKeyValue等。

    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],必须为小写”。

    注意
    类型可能是大写的,但不建议使用。

    参考文献

    1. 维基百科ElasticSearch
    2. ElasticSearch文档
    3. 谷歌浏览器POSTMAN

    翻译自: https://mkyong.com/elasticsearch/elasticsearch-hello-world-example/

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值