了解弹性搜索

时间:2013-12-16 12:53:23

标签: elasticsearch

很抱歉这样说,但ES的文档(http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/index.html)令我感到困惑。

感谢词汇表,我理解数据库,表格和行的术语,但我已经阅读了大量的文档部分,但我找不到答案:

作为参考,我先阅读这些链接:

如果文档中存在该信息,那么如果您能指出我的话,我将非常感激。

修改

我也不确定自动发现如何在分布式网络上运行。如果每个公共网络都围绕它如何连接到可能位于世界另一端的正确网络,那么会很短暂?

3 个答案:

答案 0 :(得分:13)

请参阅下面的问题解答。

  

你没有“拥有”,但你可能应该特别希望在制作中。默认值为五个分片和一个复制。

定义的复制数量只是整个索引在elasticsearch集群中的所有节点中复制的次数。可以将其视为RDBMS数据库的多个读取副本(但在这种情况下,我们会读取和写入所有副本)。

分片是我分割或分片索引的次数。所以,我可以有一个带有单个分片的索引,或者我可以有一个包含多个分片的索引。这在概念上类似于通过主键分片RDBMS数据库,但不完全相同。

因此,索引中的分片总数是number_of_shards和number_of_replicas的乘积。

当您进行搜索时,elasticsearch会将您的搜索分发到包含索引中分片的所有可能节点,并为您汇总结果。您可以将此视为map / reduce,其中地图将搜索发送到每个分片,reduce会收集结果。

此外,您可以随时更改复制number_of_replicas,但永远不能更改number_of_shards。必须在索引创建时设置。

  
      
  • 如何拥有2个副本的3个分片?如果词汇表是任何事情,那么考虑到a不应该是不可能的   shard是“是一个单独的Lucene实例”吗?
  •   

我认为上述内容主要是回答这个问题,但重要的是要记住,elasticsearch主要是一种搜索的分布式计算解决方案。我们将工作分成多个碎片和可能的机器。

  
      
  • 如果我稍后添加更多节点,如何更改这些值以跨越新节点?
  •   

一旦群集知道群集中的另一个节点,您就不需要其他操作。这些设置会自行传播到整个群集中。在上面的三个分片和两个副本的示例中,如果最初有两个节点并添加了第三个节点,则每个节点平均每个节点有两个分片,此分片移动在没有您干预的情况下发生(同样,如果群集知道新节点)

  
      
  • 如何在ES中进行分片?
  •   

见上文

  
      
  • 副本集如何在ES中运行?
  •   

见上文

  

您无需主动“管理”它。如前所述,分片和您在索引创建时定义的所有其他内容都会传播到群集中的新节点。

您可以像这样定义副本和分片:

{
    "settings": {
        "index": {
            "number_of_shards": 20,
            "number_of_replicas": 1
        }
    },
    "mappings": {
        "some_type": {
            "properties": {
                "some_field": {
                    "type": "long"
                }
            }
        }
    }
}
  
      
  • 如何管理副本集?即如何添加复制品,促进初选等?
  •   

您可以通过更新索引API执行此操作,此处的网站上可以找到此特定案例的文档:

http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/indices-update-settings.html

我刚注意到你的编辑,请看下面的内容:

  
      
  • 我也不确定自动发现如何在分布式网络上运行。
  •   

在YML配置文件中,您可以像这样设置单播:

discovery.zen.ping.multicast.enabled: false
#discovery.zen.minimum_master_nodes: 3
discovery.zen.ping.unicast.hosts: ["ip.add.r.ess", "ip.add.r.ess"]

中间设置是一个重要的设置,但我在这里评论它。该数字应始终为(主节点/ 2)+1的数量。这是为了避免裂脑情况。通常我将所有节点设置为主节点。

这些设置适用于单播,这是我认为您的问题而不是多播。

答案 1 :(得分:6)

简而言之,索引会被分解为碎片。可以复制碎片,这意味着同一碎片的多个副本可以存在于同一个群集中。因此,如果索引有3个分片和2个副本,这意味着你总共有9个分片,其中6个是三个主分片的副本。

ES,将尝试在群集中平衡分片及其副本,以便在节点出现故障时,可以将该节点上的主分片故障转移到副本。这可能会让一些人感到困惑:弹性搜索中的主人指的是分片,而不是实际的节点。因此,单个节点可以混合使用副本和主分片。

如果你来自lucene世界,lucene索引与弹性搜索索引不同。弹性搜索索引是具有类型,映射和文档的索引文档的逻辑组。或多或少与数据库模式相同。另一方面,lucene索引是包含索引数据的一组文件。当Elastic搜索创建索引时,它所做的是创建几个lucene索引(每个字段和分片一个),当它复制时,它基本上是复制这些lucene索引的文件。

您无法更改索引的分片数,但可以更改副本数。通常,当您需要更多分片时,您要执行的操作是创建新索引并重新索引数据。

除了决定碎片数量之外的碎片管理方面,默认情况下没有太多可以管理的东西,ES本身就很好地协调了一些事情。一旦你获得更好的理解,你可以选择大量的选项它是如何工作的。对于大多数人来说,默认值都很好。在集群管理方面,您可以通过API以受控方式关闭节点,使用索引别名,更改副本数量等方面做很多事情。

对于自动发现,ES默认使用本地网络多播。您可以切换到单播,并且您可能想要更改默认的clustername以防止发生意外(在咖啡店中有一些非常有趣的群集形成)。您可能不希望全局集群。我没有看到结局很好。

答案 2 :(得分:1)

Shay Banon (ElastiSearch的创建者)的视频演示中,大约有80%的问题得到了解答。虽然这个演示文稿比你在其他地方找到的要多得多。希望这可以帮助。

  http://www.infoq.com/presentations/ElasticSearch  

此视频分辨率较低,因此如果您希望演示文稿中显示的代码,请按照

进行操作
  https://github.com/kimchy/talks/tree/master/2011/wsnparis