Я попытался применить собственный анализатор английского языка, а также стандартный анализатор английского языка в elasticsearch. Моя цель - особенно использовать стемминг. Допустим, у меня в документах есть следующие слова: обложки, оттиски.
Теперь, если я буду искать, например, обложка или впечатляющая или впечатления, я получаю 0 результатов. Только если я буду искать точные термины «покрывает» или «впечатление», я найду результаты.
Это мои настройки в elasticsearch (согласно этой документации https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-lang-analyzer.html):
{
"settings": {
"analysis": {
"filter": {
"english_stop": {
"type": "stop",
"stopwords": "_english_"
},
"english_stemmer": {
"type": "stemmer",
"language": "english"
},
"english_possessive_stemmer": {
"type": "stemmer",
"language": "possessive_english"
}
},
"analyzer": {
"rebuilt_english": {
"tokenizer": "standard",
"filter": [
"english_possessive_stemmer",
"lowercase",
"english_stop",
"english_stemmer"
]
}
}
}
}
}
Мое отображение выглядит следующим образом:
"mapping": {
"_doc": {
"properties": {
"title": {"type": "text",
"analyzer": "rebuilt_english"},
"description: {"type": text"
"analyzer": "rebuilt_english"}
}
}
}
Я также попытался (согласно нескольким различным руководствам) изменить такие настройки (я просто добавляю здесь изменения, а не снова полный код):
{
"settings": {
"analysis": {
"analyzer: "rebuilt_english" {
"type": "custom",
"filter": #and so on...
Я что-то здесь упускаю? Насколько я понимаю, мне нужно установить настройки для конкретного анализатора в «настройках», дать ему имя, а затем использовать это имя в свойствах «сопоставления», чтобы каждый элемент анализировался в соответствии с настройками, установленными выше.
Я также старался не устанавливать какие-либо конкретные настройки и просто задавал свойства анализатора (в сопоставлении) для каждого элемента, например:
"title": {"type": "text",
"analyzer": "english"}
Что также не работает (даже при использовании таких фильтров, как стемминг).
Я действительно часами пытался найти решение, но не могу заставить его работать. Помощь будет очень признательна. Спасибо!
ОБНОВЛЕНИЕ
Это код, который я использовал для создания индекса (моя последняя попытка, согласно моему описанию, я также пробовал другие способы применения метода):
PUT /my_index
{
"settings": {
"analysis": {
"analyzer": {
"rebuilt_english": {
"type": "custom",
"filter": {
"english_stop": {
"type": "stop",
"stopwords": "_english"
},
"english_stemmer": {
"type": "stemmer",
"language": "english"
},
"english_possessive_stemmer": {
"type": "stemmer",
"language": "possessive_english"
},
"tokenizer": "standard",
"filter": [
"english_possessive_stemmer",
"lowercase",
"english_stop",
"english_stemmer"
]
}
}
}
},
"mappings": {
"_doc": {
"properties": {
"title": { "type": "text",
"analyzer": "rebuilt_english"
},
"description": { "type": "text",
"analyzer": "rebuilt_english"}
}
}
}
}
}
GET /index-name
должен вернуть это. Может где-то была ошибка - person Evaldas Buinauskas   schedule 24.01.2019mappping
, а неmappings
при создании индекса. - person Evaldas Buinauskas   schedule 24.01.2019mappings
. - person runner2018   schedule 24.01.2019