首页 > 解决方案 > elasticsearch 更新索引设置分析器

问题描述

我有一个包含多个主题的图书索引

  • 化学
  • 生物学

  • 每个主题都有自己的同义词集和全局同义词

    PUT /books/_settings
    {
        "analysis": {
            "filter": {
                "biology_synonyms": {
                    "type": "synonym",
                    "synonyms": [
                        "a, aa, aaa"
                    ]
                },
                "chemistry_synonyms": {
                    "type": "synonym",
                    "synonyms": [
                        "c, cc, ccc"
                    ]
                },
                "global_synonyms": {
                    "type": "synonym",
                     "synonym": [
                       "x, xx, xxx"
                     ]
                }
            },
            "analyzer": {
                "chemistry_analyzer": {
                    "filter": [
                        "global_synonyms", "chemistry_synonyms"
                    ]
                },
                 "biology_analyzer": {
                    "filter": [
                        "global_synonyms", "biology_synonyms"
                    ]
                }
            }
        }
    }
    


    假设在任何时候,我想添加名为“Astronomy”的新主题
    现在的问题是如何更新索引设置以添加新的“Astronomy_synonyms”和“Astronomy_analyzer”



    我的应用程序要求我使用现有过滤器和分析器附加设置,我不想覆盖(替换设置)

  • 标签: elasticsearch

    解决方案


    您绝对可以附加新的令牌过滤器和分析器,但是您需要在更新设置之前关闭索引并在完成后重新打开它。在下文中,我假设索引已经存在。

    假设您使用以下初始设置创建索引:

    PUT /books
    {
      "settings": {
        "analysis": {
          "filter": {
            "biology_synonyms": {
              "type": "synonym",
              "synonyms": [
                "a, aa, aaa"
              ]
            },
            "chemistry_synonyms": {
              "type": "synonym",
              "synonyms": [
                "c, cc, ccc"
              ]
            },
            "global_synonyms": {
              "type": "synonym",
              "synonyms": [
                "x, xx, xxx"
              ]
            }
          },
          "analyzer": {
            "chemistry_analyzer": {
              "type": "custom",
              "tokenizer": "standard",
              "filter": [
                "global_synonyms",
                "chemistry_synonyms"
              ]
            },
            "biology_analyzer": {
              "type": "custom",
              "tokenizer": "standard",
              "filter": [
                "global_synonyms",
                "biology_synonyms"
              ]
            }
          }
        }
      }
    }
    

    然后你需要关闭你的索引:

    POST books/_close
    

    然后您可以附加新的分析器和令牌过滤器:

    PUT /books/_settings
    {
      "analysis": {
        "filter": {
          "astronomy_synonyms": {
            "type": "synonym",
            "synonyms": [
              "x, xx, xxx"
            ]
          }
        },
        "analyzer": {
          "astronomy_analyzer": {
            "type": "custom",
            "tokenizer": "standard",
            "filter": [
              "global_synonyms",
              "astronomy_synonyms"
            ]
          }
        }
      }
    }
    

    最后重新打开你的索引

    POST books/_open
    

    如果您随后检查索引设置,您会看到所有内容都已正确合并。


    推荐阅读