Home > Enterprise >  How to apply multiple settings in index in elasticsearch
How to apply multiple settings in index in elasticsearch

Time:06-30

  • I need to have two settings
  • One is stopwords settings, second is synonym settings.
  • How to add different settings applied on one index

Below is stopwords setting which i need to apply on the index

settings_1 = {
  "settings": {
    "index": {
      "analysis": {
        "analyzer": {
          "my_stop_analyzer": {
            "type": "custom",
            "tokenizer": "standard",
            "filter": "my_fil"
          }
        },
        "filter": {
          "my_fil": {
            "type": "stop",
            "stopwords_path": "st.txt",
            "updateable": true
          }
        }
      }
    }
  },
  "mappings": {
    "properties": {
      "description": {
        "type": "text",
        "analyzer": "standard",
        "search_analyzer": "my_stop_analyzer"
      }
    }
  }
}

Below is synonym setting which i need to apply on the index

settings_2 = {
  "settings": {
    "index": {
      "analysis": {
        "analyzer": {
          "my_analyzer": {
            "type": "custom",
            "tokenizer": "standard",
            "filter": [
              "my_filter"
            ]
          }
        },
        "filter": {
          "my_filter": {
            "type": "synonym",
            "synonyms_path": "sy.txt",
            "updateable": true
          }
        }
      }
    }
  },
  "mappings": {
    "properties": {
      "description": {
        "type": "text",
        "analyzer": "standard",
        "search_analyzer": "my_analyzer"
      }
    }
  }
}

Will the code work like below

  • es.indices.put_settings(index="gene", body=settings_1)

  • es.indices.put_settings(index="gene", body=settings_2)

CodePudding user response:

Although you can use the two different update setting like you mentioned but this is not a preferred way 1) it involves two network call to Elasticsearch 2) this can be combined in a single call and it will have less overhead at Elasticsearch to update the cluster state to all the nodes.

You can just combine both the settings and send single update setting request. you can first test this in Postman or kibana dev tools with JSON format.

As discussed in the comment, below is the complete setting and mapping part combining two settings(which defines two analyzer)

{
    "settings": {
        "index": {
            "analysis": {
                "analyzer": {
                    "my_stop_analyzer": {
                        "type": "custom",
                        "tokenizer": "standard",
                        "filter": "my_fil"
                    },
                    "my_analyzer": {
                        "type": "custom",
                        "tokenizer": "standard",
                        "filter": [
                            "my_filter"
                        ]
                    }
                },
                "filter": {
                    "my_fil": {
                        "type": "stop",
                        "stopwords_path": "analyzers/<your analyzer ID>",
                        "updateable": true
                    },
                    "my_filter": {
                        "type": "synonym",
                        "synonyms_path": "analyzers/F111111111",
                        "updateable": true
                    }
                }
            }
        }
    },
    "mappings": {
        "properties": {
            "description": {
                "type": "text",
                "analyzer": "standard",
                "search_analyzer": "my_stop_analyzer"
            }
        }
    }
}
  • Related