Elasticsearch之重建索引

本文探讨了基于Lucene实现的倒排索引原理及其在搜索引擎中的应用,详细阐述了在何种情况下需要进行索引重建,包括添加新字段、更新自定义词库及更换分词器等场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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设置

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值