java吧 关注:1,186,721贴子:12,592,949
  • 6回复贴,共1

Elasticsearch搜索引擎入门探索

只看楼主收藏回复

ElasticSearch是一个基于Lucene的搜索服务器,最近比较感兴趣,也参考了网上的资料,随便写的东西,希望对感兴趣的人有些帮助。


1楼2017-12-02 16:09回复
    第一章 基础入门
    1.1. 探索你的集群
    REST API
    现在我们已经有一个正常运行的节点(和集群)了,下一步就是要去理解怎样与其通信了。幸运的是,Elasticsearch提供了非常全面和强大的REST API,利用这个REST API你可以同你的集群交互。下面是利用这个API,可以做的几件事情:
    Ø 检查你的集群、节点和索引的健康状态、和各种统计信息。
    Ø 管理你的集群、节点、索引数据和元数据。
    Ø 对你的索引进行CRUD(创建、读取、更新和删除)和搜索操作。
    Ø 执行高级的查询操作,像是分页、排序、过滤、脚本编写(scripting)、小平面刻画(faceting)、聚合(aggregations)和许多其它操作。


    2楼2017-12-02 16:11
    回复
      1.1.1. 集群健康检查
      让我们以基本的健康检查作为开始,我们可以用它来查看我们集群的运行情况。在此过程中,我们使用curl,当然,你也可以使用任何可以创建HTTP/REST调用的工具。
      我们可以使用 _cat API来检查集群的健康情况,在这里我们将使用Kibana的控制台来查看集群监控情况。
      命令:GET /_cat/health?v
      响应如下:

      我们可以看到一个名为“elasticsearch”的集群,并且状态是green。以下则是状态的所有类型:
      Ø Green:正常状态,集群所有功能可以正常使用。
      Ø Yellow:所有数据均可使用,然而一些副本(replicas)并没有被分配,集群所有功能可以正常使用。
      Ø Red:因为某些原因,一部分数据无法使用,集群某些功能无法使用。
      注意:当集群为Red时,Elasticsearch将继续在可用的分片(shards)上提供搜索服务。但是因为有一些未分配的分片,你必须要尽快的修复它。
      我们继续来看上面的返回结果,因为我们没有任何数据所以我们也没有分片,并且我们只有一个节点(node)。Elasticsearch使用发现(discovery)模块来发现同一个集群中的其他节点并与他们连接。默认情况下,Elasticsearch节点会向网络中发送广播请求,以找到拥有相同集群名称的其他节点。
      我们可以通过以下命令来获取我们集群中的节点信息:
      GET /_cat/nodes?v
      响应如下:

      在我们的集群中我们可以看到一个名为”my_node”的单一节点。


      3楼2017-12-02 16:14
      回复
        1.1.2 列出全部索引
        现在让我们看一下我们的全部索引:
        命令:GET /_cat/indices?v
        响应如下:
        health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
        这意味着我们在集群中没有任何索引。


        4楼2017-12-02 16:15
        回复
          一.1.1. 创建一个索引
          现在让我们来创建一个名为“customer”的索引并列出全部索引:
          PUT /customer?pretty
          GET /_cat/indices?v
          响应如下:

          通过返回结果我们可以看到我们拥有了一个名为“customer”的索引,并且它有5个主分片(primary shards)和1个默认的副本(replica),但是它并没有任何文档(documents)。
          你可能也注意到了这个customer索引有一个黄色健康标签,回顾我们之前的讨论,黄色意味着某些副本没有(或者还未)被分配。
          之所以发生这种情况是因为Elasticsearch会默认的为索引创建一个副本。因为我们只有一个节点在运行所以副本无法分配下去(为了高可用性),直到当另外一个节点加入到这个集群后,才能分配。一旦副本在第二个节点上被复制,这个节点的健康状态就会变成绿色。


          5楼2017-12-02 16:17
          回复
            1.1.4.索引并查询文档
            现在让我们向“customer”索引中放一些东西,我们将一个简单的客户文档索引到“customer”索引中,它的ID为1:
            PUT /customer/doc/1?pretty
            {
            "name": "John Doe"
            }
            响应如下:

            通过返回结果我们可以看到这个文档被成功的索引到了”customer“索引下,文档的id为1,这个id是我们在索引的时候指定的。
            有一个关键点需要注意,Elasticsearch在你想将文档索引到某个索引的时候,并不强制要求这个索引被显式地创建。在前面这个例子中,如果customer索引不存在,Elasticsearch将会自动地创建这个索引。
            现在,让我们把刚刚索引的文档取出来:
            GET /customer/doc/1?pretty
            响应如下:

            除了一个叫做“found”的字段来指明我们找到了一个ID为1的文档,和另外一个字段“_source”返回我们前一步中索引的完整JSON文档之外,其它的都没有什么特别之处。


            6楼2017-12-02 16:19
            回复
              一.1.1. 删除一个索引
              现在让我们删除我们刚刚创建的索引,并再次列出所有的索引:
              DELETE /customer?pretty
              GET /_cat/indices?v
              响应如下:
              health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
              这表明我们成功地删除了这个索引,现在我们的集群又回到了一无所有的状态。
              在学习接下来的内容之前,让我们仔细的再看一遍我们掌握的这些API命令:
              PUT /customer
              PUT /customer/doc/1
              {
              "name": "John Doe"
              }
              GET /customer/doc/1
              DELETE /customer
              如果我们仔细研究以上的命令,我们可以发现访问Elasticsearch中数据的一个模式。这个模式可以被总结为:
              REST 动词/索引名称/类型/ID
              这个REST访问模式普遍适用于所有的API命令,如果你能记住它,你就会为掌握Elasticsearch开一个好头。


              7楼2017-12-02 16:20
              回复