Я попытался установить новый индекс, настроив его отображение и настройки.Определения отображения и определения Elasticsearch
Вот код, который я использовал:
POST /test/text
{
"settings": {
"analysis": {
"filter": {
"greek_stop": {
"type": "stop",
"stopwords": "_greek_"
},
"greek_lowercase": {
"type": "lowercase",
"language": "greek"
},
"greek_stemmer": {
"type": "stemmer",
"language": "greek"
}
},
"analyzer": {
"greek": {
"tokenizer": "standard",
"filter": [
"greek_lowercase",
"greek_stop",
"greek_stemmer"
]
}
}
}
},
"mappings": {
"article": {
"properties": {
"title": {
"type": "string",
"fields": {
"greek": {
"type": "string",
"analyser": "greek"
}
}
},
"content": {
"type": "string",
"fields": {
"greek": {
"type": "string",
"analyser": "greek"
}
}
},
"indexed_date": {
"type": "date",
"format": "strict_date_optional_time||epoch_millis"
}
}
}
}
}
Я использовал POST, как я даже не позаботился о _id и таким образом ES дает случайное значение этой переменной, вместо использования PUT, где я должен укажите его значение. Причина, по которой я создал два поля для заголовка и контента, заключается в том, что я хочу иметь исходную версию текста и версию «stop words removed-stemmed», чтобы иметь возможность весить выше, если этот термин найден точно так же, как введенный пользователем он (вместо того, чтобы хранить только стебли версии слова)
После заполнения индекса с данными, например:
PUT /test/text
{
"title": " ",
"content": " ",
"date": " "
}
Я пытался делать поисковый запрос, как это:
GET /test/text/_search
{
"query":{
"multi_match":{
"query":"όμορφος",
"type":"most_fields",
"fields":["content","content.greek","title","title.greek"]}}}
И то, изменив запрос на «όμορφη», эти слова hav e такая же версия, что и «όμορφ», и в результате благодаря греческому языковому анализатору ES я должен получить ту же запись, которой я не занимаюсь.
Любая идея, почему? Должен ли я делать что-то еще при индексировании моих документов? После прочтения документации у меня сложилось впечатление, что после определения отображения при индексировании фрагмента текста он автоматически будет индексироваться в обоих направлениях, и запрос будет каждый раз анализироваться с использованием соответствующего анализатора автоматически.
Если у меня есть правильное впечатление, почему мой запрос не возвращает те же результаты? Есть идеи?
Заранее спасибо.
Когда я пытаюсь создать индекс с POST, я получаю: { "_index": "test", " _type ": "Текст", "_id": "AVfDJVLHvgDv319PJqTd", "_version": 1, "_shards": { "всего": 2, "успешно": 1, "не удалось": 0 }, "создано": правда } с другой стороны, с PUT я получаю: не найдено обработчика для URI [/ тест/статьи] и метод [Put] Любая идея, почему? Когда я создаю/тест вместо/тест/текст, который я получаю: "типа": "mapper_parsing_exception", "причина": "определение Mapping для [полей] неподдерживаемые параметры: [анализатор: греческий]" – Swan87
Поскольку I не хотите, чтобы настроить греческий анализатор можно просто сделать: «отображения»: { «my_type_name»: { «свойства»: { «название»: { «типа»: «текст», «анализатор» : «английский» } } } } вместо того, чтобы включать в себя все это определение? – Swan87
При создании индекса вы ДОЛЖНЫ иметь 'PUT' и только имя вашего индекса. При создании документа вы можете либо «POST index/type», либо «PUT index/type/id». Удалите свой индекс и начните снова с моего предложения выше. – Val