了解弹性搜索

Sam*_*aye 7 elasticsearch

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

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

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

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

编辑:

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

Jam*_*s R 13

请参阅下面的获得积分的答案.

你没有"拥有",但你可能应该特别希望在生产中.默认值为五个分片和一个复制.

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

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

因此,索引中将拥有的分片总数是number_of_shards和number_of_replicas的乘积.

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

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

  • 如何拥有2个副本的3个分片?如果词汇表是任何事情,那么考虑到碎片是"单个Lucene实例",这不是不可能的吗?

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

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

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

  • 分片如何在ES中工作?

往上看

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

往上看

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

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

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

您可以通过更新索引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"]
Run Code Online (Sandbox Code Playgroud)

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

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


Jil*_*urp 6

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

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

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

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

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

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