如何在ElasticSearch上定义分片数?

时间:2015-08-18 20:03:38

标签: elasticsearch

我已安装了一个包含三个节点的弹性搜索群集,我假装用于搜索电子邮件。

在我的平台上,我每月会收到40k邮件。所以我的问题是如何在ElasticSearch上定义分片数和副本号?

该措施是否有最佳做法?

提前致谢。

2 个答案:

答案 0 :(得分:0)

您可以在elasticsearch.yml文件中或为索引创建模板时定义它。

答案 1 :(得分:0)

最好的方法是每个时间段有一个索引,比如每月或每周一个索引。这将有所帮助,因为一旦创建了索引,我们就无法增加每个索引的分片数。

现在您需要定义将来要创建的索引的maping和设置。因此,您需要定义一个index template,然后再定义这些。

最佳做法是在模板中定义分片编号和副本编号。

以下是一个示例模板,该模板将应用于未创建且名称以te开头的任何索引。

curl -XPUT localhost:9200/_template/te_prefix -d '{
    "template" : "te*",
        "settings" : {
            "number_of_shards" : 3,
            "number_of_replicas" : 1
        },
    "mappings" : {
        "_default_" : {
            "_all" : { "enabled" : false }
        }
    }
}'

或者,如果您只想创建一个索引和设置,可以使用以下方法 - 索引名称是统计数据。

curl -X PUT "http://localhost/stats" -d '{
  "settings": {
    "index": {
      "number_of_shards": 1,
      "number_of_replicas": 1
    },
    "analysis": {
      "analyzer": {
        "flat": {
          "type": "custom",
          "tokenizer": "keyword",
          "filter": "lowercase"
        }
      }
    }
  },
  "mappings": {
    "stats": {
      "properties": {
        "DocCount": {
          "type": "long"
        },
        "Query": {
          "type": "string",
          "analyzer": "flat"
        },
        "ResponseTime": {
          "type": "long"
        }
      }
    }
  }
}'