Elasticsearch: добавить фильтр синонимов на мой анализатор английского языка

У меня есть индекс с описанием поля, который анализируется так:

"description":{
      "analyzer" : "english",
      "type" : "string"
}

Я определил словарь синонимов в файле synonyms.txt, который содержит:

ipod, i-pod, i pod => i-pod

Я хотел бы добавить этот словарь синонимов в свой анализатор, но я не знаю, как это сделать. Должен ли я определить собственный анализатор? Но если я сделаю это, я отклонюсь от своей текущей индексации из-за этого customisation.index

1 ответ

Решение

Да, вы должны определить пользовательский анализатор. Вы можете начать со стандартного английского анализатора и добавить к нему свой синоним-фильтр:

{
  "settings": {
    "analysis": {
      "filter": {
        "english_stop": {
          "type":       "stop",
          "stopwords":  "_english_" 
        },
        "english_keywords": {
          "type":       "keyword_marker",
          "keywords":   [] 
        },
        "english_stemmer": {
          "type":       "stemmer",
          "language":   "english"
        },
        "english_possessive_stemmer": {
          "type":       "stemmer",
          "language":   "possessive_english"
        },
        "my_synonyms" : {
          "type" : "synonym",
          "synonyms_path" : "path/to/synonym.txt"
        }
      },
      "analyzer": {
        "custom_english": {
          "tokenizer":  "standard",
          "filter": [
            "english_possessive_stemmer",
            "lowercase",
            "my_synonyms",
            "english_stop",
            "english_keywords",
            "english_stemmer"
          ]
        }
      }
    }
  }
}

Насколько это будет расходиться, да. Если вы применяете свои синонимы как индексное время, для вновь проиндексированных данных будет применен фильтр синонимов, а для существующих данных - нет. Если вы хотите, чтобы изменения в анализе индекса времени применялись последовательно, вам необходимо переиндексировать данные.

Если изменение в анализе будет только в вашем search_analyzer, то нет необходимости переиндексировать.

Другие вопросы по тегам