Я пытаюсь создать индекс ElasticSearch, который будет содержать документы с названиями продуктов, например ноутбуков -
{ "name" : "Laptop Blue I7"}
Тогда я хочу использовать его для предложения автозаполнения, запрашивая индекс ES. У меня есть 2 основных ограничения:
- Синонимы названия могут быть -
Я хочу определить синонимы для таких терминов, как «Блокнот» для «Ноутбук»
Загруженные документы могут быть следующего вида -
"Laptop Blue I7"
"Laptop Blue I7"
"Laptop Blue I7"
"Laptop Blue I7"
"Laptop Red I7"
"Laptop Red I7"
"Notebook Blue I7"
Теперь я добавляю следующие параметры и файл сопоставления при создании индекса -
{
"settings": {
"index": {
"analysis": {
"filter" : {
"synonym" : {
"type" : "synonym",
"synonyms" : ["Laptop,Notebook"]
}
},
"analyzer": {
"synonym" : {
"tokenizer" : "keyword",
"filter" : ["synonym"]
}
}}}},
"mappings": {
"catalog": {
"properties": {
"name": {
"type": "text",
"analyzer": "synonym"
}
}
}
}
}
- Запрос -
Когда я запрашиваю данные с помощью «Записной книжки»,
предпочтительный ответ должен быть упорядочен по частоте и синониму. Однако, когда я запрашиваю, ответ обычно не зависит от синонима и частоты. Я использую следующий запрос -
/_search
{"query": {
"query_string" : {"default_field" : "name", "query" : "Notebook"}
} }
Ответ, который я получаю, -
"Notebook Blue I7"
Хотелось бы, чтобы ответом было одно из следующих:
"Laptop Blue I7"
"Laptop Red I7"
или
"Notebook Blue I7"
"Laptop Blue I7"
"Laptop Red I7"
Любое понимание в решении этого было бы полезно. Спасибо
========
Изменить 1:
Когда я использую \_analyze
на «Записной книжке», ответ будет
{'tokens': [{'end_offset': 3,
'position': 0,
'start_offset': 0,
'token': 'Notebook',
'type': '<ALPHANUM>'},
{'end_offset': 3,
'position': 0,
'start_offset': 0,
'token': 'Laptop',
'type': 'SYNONYM'}]}