2015-07-23 12 views
0

У меня есть индекс с описанием поля, которое анализируется так:Elasticsearch: добавить синоним фильтр на моем английском анализаторе

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

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

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

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

ответ

2

Да, вы должны определить пользовательский анализатор. Вы можете начать с standard English analyzer, и добавить к этому synonymfilter:

{ 
    "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, тогда нет необходимости повторно индексировать.