简体   繁体   中英

elasticsearch Updating Index settings analyzer

I have a Books Index which contains multiple subjects

  • chemistry
  • biology
  • etc
    Each subject have there own set of synonyms and a global synonyms

    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" ] } } } }


    Let's say at any point in time, I want to add new subject named "Astronomy"
    Now the problem is how do I Update the index settings to add new "Astronomy_synonyms" and "Astronomy_analyzer"



    my application requires me to append settings with existing filters and analyzers, I don't want to overwrite(replace settings)

  • You can definitely append new token filters and analyzers, however you need to close your index before updating the settings and reopen it when done. In what follows, I assume the index already exists.

    Let's say you create your index with the following initial settings:

    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"
              ]
            }
          }
        }
      }
    }
    

    Then you need to close your index:

    POST books/_close
    

    Then you can append new analyzers and token filters:

    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"
            ]
          }
        }
      }
    }
    

    And finally reopen your index

    POST books/_open
    

    If you then check your index settings, you'll see that everything has been properly merged.

    You can only define new analyzers on closed indices. To add an analyzer, you must close the index, define the analyzer, and reopen the index.

    POST /books/_close
    
    PUT /books/_settings
    {
        "analysis": {
            "filter": {
                "astronomy_synonyms": {
                    "type": "synonym",
                    "synonyms": [
                       "a, aa, aaa=>a"
                    ]
                }
            },
            "analyzer": {
                "astronomy_analyzer": {
                  "tokenizer" : "whitespace",
                    "filter": [
                        "global_synonyms", "astronomy_synonyms"
                    ]
                }
            }
        }
    }
    
    POST /books/_open
    

    The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

     
    粤ICP备18138465号  © 2020-2024 STACKOOM.COM