Kaushik J
Kaushik J

Reputation: 1062

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)

    Upvotes: 0

    Views: 752

  • Answers (2)

    jaspreet chahal
    jaspreet chahal

    Reputation: 9099

    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
    

    Upvotes: 0

    Val
    Val

    Reputation: 217254

    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.

    Upvotes: 1

    Related Questions