anchor.diff:  '
   --------------------------------------------------
   
  -Index level settings can be set on the node level as well, for example,
  -within the `elasticsearch.yml` file, the following can be set:
  +Index级别设置也可以设置在节点级别上, 例如在 `elasticsearch.yml` 文件中, 可以设置如下:
   
   [source,yaml]
   --------------------------------------------------
  
positive.code:   name: ${prompt.text}
  --------------------------------------------------
  
  On execution of the `elasticsearch` command, you will be prompted to enter
  the actual value like so:
  
  [source,sh]
  --------------------------------------------------
  Enter value for [node.name]:
  --------------------------------------------------
  
  NOTE: Elasticsearch will not start if `${prompt.text}` or `${prompt.secret}`
  is used in the settings and the process is run as a service or in the background.
  
  [float]
  [[configuration-index-settings]]
  === Index Settings
  
  Indices created within the cluster can provide their own settings. For
  example, the following creates an index with memory based storage
  instead of the default file system based one (the format can be either
  YAML or JSON):
  
  [source,sh]
  --------------------------------------------------
  
negative.code: 
  [float]
  [[vm-max-map-count]]
  ==== 虚拟内存
  
  Elasticsearch 默认使用 <<default_fs,`hybrid mmapfs / niofs`>> 目录来存储它的索引. 操作系统对于
  mmap数量的默认限制有可能会非常小, 这样会导致内存溢出异常. 在 Linux 系统中, 你可以通过以 `root` 用户运行下面的命令来增加这个限制:
  
  [source,sh]
  -------------------------------------
  sysctl -w vm.max_map_count=262144
  -------------------------------------
  
  想要永久地设置这个值, 可以更新 `/etc/sysctl.conf` 中的 `vm.max_map_count` 设置.
  
  NOTE: 如果安装 Elasticsearch 你使用的是一个 .deb 或 .rpm 包, 这个设置将会自动的改变. 可以运行 `sysctl vm.max_map_count` 来验证这一点.
  
  [float]
  [[setup-configuration-memory]]
  ==== 内存设置
  
  大多数操作系统都会试图为文件系统缓存使用尽可能多的内存并且急切地将未使用的应用程序内存交换出来, 这样很可能会导致 elasticsearch 进程被交换. 交换是非常影响性能和节点稳定性的, 所以应该不惜一切代价来避免它.
  
  下面有三种解决方案:
  
  * **禁用交换**
  +
  --
  
  最简单的方案就是完全禁用交换. 通常 Elasticsearch 是机器上运行的唯一服务, 并且它的内存使用是由 `ES_HEAP_SIZE` 环境变量控制的.  所以应该不需要启用交换.
  
  在 Linux 系统上, 你可以通过运行 `sudo swapoff -a` 来临时地禁用交换. 想要永久禁用它, 你需要编辑 `/etc/fstab` 文件并注释掉所有包含单词 `swap` 的行.
  
  在 Windows 系统上, 通过 `System Properties → Advanced → Performance → Advanced → Virtual memory` 完全禁用页面文件可以实现同样的效果.
  
  --
  
  * **配置 `swappiness`**
  +
  --
  第二种方案就是确保 sysctl 值 `vm.swappiness` 被设置成 `0`. 这将会减少内核进行交换的趋势并且不会导致正常情况下也进行交换, 但是在紧急情况下仍然允许
  整个操作系统进行交换.
  
  NOTE: 从内核 3.5-rc1 及以上版本之后, `swappiness` 为 `0` 会导致OOM 杀手杀死这个进程而不是允许交换.
  在紧急情况下如果仍然允许交换你需要将 `swappiness` 设置成 `1`.
  --
  
  * **`mlockall`**
  +
  --
  第三种方案是在 Linux/Unix 系统上使用 http://opengroup.org/onlinepubs/007908799/xsh/mlockall.html[mlockall] 或者在 Windows 系统上使用 https://msdn.microsoft.com/en-us/library/windows/desktop/aa366895%28v=vs.85%29.aspx[VirtualLock]
  来尝试将进程地址空间锁定在 RAM 中, 以阻止任何 Elasticsearch 内存被交换出去. 这可以通过在 `config/elasticsearch.yml` 文件增加下面这行来实现:
  
  [source,yaml]
  --------------
  bootstrap.mlockall: true
  --------------
  
  Elasticsearch 启动之后, 你可以通过检查下面这个请求的输出结果中 `mlockall` 的值来判断上面的设置是否生效:
  
  [source,sh]
  --------------
  curl http://localhost:9200/_nodes/process?pretty
  --------------
  
  如果你看到 `mlockall` 的值是 `false`, 表示 `mlockall` 请求失败. 在 Linux/Unix 系统上最有可能失败的原因是运行 Elasticsearch 的用户
  没有锁定内存的权限. 在启动 Elasticsearch 之前可以通过 `root` 身份运行 `ulimit -l unlimited` 来赋权.
  
  另一个 `mlockall` 请求失败的可能原因是临时目录 (通常是 `/tmp`) 使用了 `noexec` 选项来挂载. 这可以通过在启动 Elasticsearch 时指定一个新的临时目录来解决:
  
  [source,sh]
  --------------
  ./bin/elasticsearch -Djna.tmpdir=/path/to/new/dir
  --------------
  
  WARNING: 如果 `mlockall` 试图分配比可用内存还多的内存会导致 JVM 或 shell 会话 退出!
  --
  
  [float]
  [[settings]]
  === Elasticsearch设置
  
  *elasticsearch* 的配置文件都在 `ES_HOME/config` 文件夹下. 该文件夹包含两个文件, 用于配置 Elasticsearch 不同
  <<modules,模块>> 的 `elasticsearch.yml` , 以及用于配置 Elasticsearch 日志的 `logging.yml`.
  
  配置文件的格式是 http://www.yaml.org/[YAML]. 下面是改变所有基于网络的模块用来绑定和发布的地址的一个示例:
  
  [source,yaml]
  --------------------------------------------------
  