最近的实作用 elasticsearch 来进行搜索,写了个定时任务把数据库的表和ES进行同步,当时测试没问题了。结果录演示视频的时候发现搜不出来了,上去 kibana 一看,发现索引表是空的,赶紧重新同步了一遍录完了视频。结果第二天再试又空了,很奇怪于是上网搜了一会,发现是单机模式的锅。

既然是实作而不是真的上线的业务,应该没人会建集群。而且刚好又没啥相关经验,很容易就会遗漏一些特性,比如当我们建立索引的时候,elasticsearch 会分配一个主分片和一个副本分片。但是,按照规定主分片和副本分片不应该共存于同一台服务器之上。如果是单机版的elasticsearch,主分片和副本分片共存则视为索引的状态有问题,elasticsearch系统会检测到并删除的。

所以解决问题也很简单,设置副本分片为0即可。

PUT index/_settings
{
  "index" : {
    "number_of_replicas" : 0
  }
}