Elasticsearch之重建索引

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/yexiaomodemo/article/details/97979376

0、引言

看着这个标题就好吓人,这个重建索引是建立在Lucene实现的倒排索引的原则上的,而我们的每一个查询又都是建立在倒排索引上面的,因此稳定的链条产生了:

mapping --》写入数据--》数据根据分词器生成倒排索引--》索引待查询

1、重建索引

当我们有了了解:mapping 数据存储后,倒排索引就生成了这个概念之后,那么我们很清晰了这样一个图:

实际解释成如下图:

2、重建索引场景

情况一:某一天,突然我们的搜索引擎需要加一个字段,而且这个字段是需要直接做分词的,此时我们就要重建索引了。

原因一:需要新加一列

原因二:新加的列需要做分词

情况二:分词器自定义词库扩展

原因一:每一个使用分词器分完的词均进入了倒排索引,我们更新了自定义词库,则老的文本就使用不了新的自定义词库作为关键字查询。

情况三:修改新的分词器

原因一:修改分词器后,查询词就会按照新的分词器分词,与老的倒排索引里面的词肯定不一致

原因二:修改了分词器后,mapping肯定是要修改的吧

3、动态重建索引

PUT http://192.168.159.159:9200/index1
{
  "settings": {
     "refresh_interval": "5s",
     "number_of_shards" :   1, // 一个主节点
     "number_of_replicas" : 0 // 0个副本,后面可以加
  },
  "mappings": {
    "_default_":{
      "_all": { "enabled":  false } // 关闭_all字段,因为我们只搜索title字段
    },
    "resource": {
      "dynamic": false, // 关闭“动态修改索引”
      "properties": {
        "title": {
          "type": "string",
          "index": "analyzed",
          "fields": {
            "cn": {
              "type": "string",
              "analyzer": "ik"
            },
            "en": {
              "type": "string",
              "analyzer": "english"
            }
          }
        }
      }
    }
  }
}

resource:dynamic

这里面貌似有解决办法,但是我没尝试【基本解决办法还是重新加载数据】:http://laijianfeng.org/2018/08/Elasticsearch-6-x-Mapping%E8%AE%BE%E7%BD%AE/

参考来源:

为Elasticsearch添加中文分词,对比分词器效果

Elasticsearch-6-x-Mapping设置

猜你喜欢

转载自blog.csdn.net/yexiaomodemo/article/details/97979376