2014-11-20 4 views
0

Я хотел бы получить анализатор с поведением стандартного английского анализатора, а также набор слов, которые должны быть синонимами во время поиска.фильтр синонимов elasticsarch с английским анализатором

Это определение, которое я пробовал:

{ 
    "analysis": { 
    "filter": { 
     "synonym_en": { 
     "type": "synonym", 
     "synonyms": [ 
      "universe, cosmos", 
      "women, woman", 
      "man, men" 
     ] 
     }, 
     "my_filter": { 
     "type": "word_delimiter", 
     "preserve_original": "false", 
     "split_on_numerics": "false" 
     } 
    }, 
    "analyzer": { 
     "my_analyzer": { 
     "type": "custom", 
     "filter": [ 
      "my_filter" 
     ], 
     "tokenizer": "keyword" 
     }, 
     "my_english": { 
     "type": "english", 
     "stopwords": [ 
      "a", 
      "an", 
      "and", 
      "are", 
      "as", 
      "at", 
      "be", 
      "but", 
      "by", 
      "for", 
      "if", 
      "into", 
      "is", 
      "it", 
      "of", 
      "on", 
      "or", 
      "such", 
      "that", 
      "the", 
      "their", 
      "then", 
      "there", 
      "these", 
      "they", 
      "this", 
      "to", 
      "was", 
      "will", 
      "with" 
     ], 
     "filter": [ 
      "synonym_en" 
     ] 
     } 
    } 
    } 
} 

Однако я не мог получить его буксирный работу. на самом деле, когда я запускаю пример:

GET /my_index/_analyze?analyzer=my_english&text='Men' 

Это только возвращает маркер men, в то время как я хотел бы иметь как man и men.

Обратите внимание, что более простой анализатор

{ 
    "settings": { 
    "analysis": { 
     "filter": { 
     "my_synonym_filter": { 
      "type": "synonym", 
      "synonyms": [ 
      "british,english", 
      "queen,monarch", 
      "man,men" 
      ] 
     } 
     }, 
     "analyzer": { 
     "my_synonyms": { 
      "tokenizer": "standard", 
      "filter": [ 
      "lowercase", 
      "my_synonym_filter" 
      ] 
     } 
     } 
    } 
    } 
} 

Кажется, работает, как она возвращается man и men.

Как я могу добиться желаемого поведения +, исходя из английского анализатора?

ответ

2

Это потому, что синоним/фильтр не применимый параметр настройки для «английского» анализатора. Существует разница между custom analyzer и встроенным анализатором. Встроенные анализаторы позволяют настраивать определенные параметры. то есть в случае языковых анализаторов stopwords ,stem exclusion .so остальных параметров в my_english псевдонима английских анализаторов просто игнорируется .Probably более соответствующего поведение здесь было бы бросить ошибку.

Пользовательских анализаторы с другой стороны, для заданного токенизатора вы можете добавить дополнительные фильтры лексем и полукокс фильтры

В любом случае, если вы хотите использовать синоним фильтр с английским анализатором необходимо создать пользовательский анализатор, который реализует английский анализатор как указано here. Вы можете добавить фильтр синонимов к этому.

Смежные вопросы