zoukankan      html  css  js  c++  java
  • [Elasticsearch] 向已存在的索引中加入自己定义filter/analyzer

    问题描写叙述

    随着应用的不断升级,索引中的类型也会越来越多,新添加的类型中势必会使用到一些自己定义的Analyzer。可是通过_settings端点的更新API不能直接在已经存在的索引上使用。

    在sense中进行更新时会抛出异常:

    PUT /symbol
    {
      "settings": {
        "analysis": {
          "filter": {
            "edgengram": {
               "type": "edgeNGram",
               "min_gram": "1",
               "max_gram": "255"
            }
          },
          "analyzer": {
            "symbol_analyzer": {
              "type": "custom",
              "char_filter": [],
              "tokenizer": "standard",
              "filter": [
                "lowercase",
                "word_delimiter"
              ]
            },
            "back_edge_ngram_analyzer": {
              "type": "custom",
              "char_filter": [],
              "tokenizer": "whitespace",
              "filter": [
                "reverse",
                "edgengram",
                "reverse"
              ]
            }
          }
        }
      }
    }

    上例中,我们希望向名为symbol的索引中加入一个filter和两个analyzers。可是会抛出例如以下的错误信息:

    {
       "error": "IndexAlreadyExistsException[[symbol] already exists]",
       "status": 400
    }

    提示我们该索引已经存在了,无法加入。


    解决方式

    最直观的解决方式是首先备份该索引中已经存在的数据。然后删除它再重建该索引。

    这样的方式比較暴力,当索引中已经存在相当多的数据时。不建议这样做。

    第二种方案是使用_open和_close这一对端点,首先将目标索引关闭,运行须要的更新操作,然后再打开该索引。

    POST /symbol/_close
    
    PUT /symbol/_settings
    {
      "settings": {
        ....    
      }
    }
    
    POST /symbol/_open

    这样就避免了须要重建索引的麻烦。

    有了新加入的filter和analyzer。就能够依据须要再对types中的mappings进行更新了。

  • 相关阅读:
    poj3669 广搜
    检索所有课程都选修的的学生的学号与姓名
    UVA10160 Servicing Stations
    uva11205 The broken pedometer 子集生成
    poj1101 the game 广搜
    poj3009 Curling 2.0 深搜
    poj 1564 Sum It Up 搜索
    HDU 2268 How To Use The Car (数学题)
    codeforces 467C George and Job(简单dp,看了题解抄一遍)
    HDU 2267 How Many People Can Survive(广搜,简单)
  • 原文地址:https://www.cnblogs.com/yxysuanfa/p/7293927.html
Copyright © 2011-2022 走看看