Я пытался реализовать средство подсказки, которое запускается рядом с запросом, чтобы предлагать варианты, если пользователь неправильно написал запрос. Следующие сопоставления и подсказки в основном работают для меня, но есть несколько запросов, которые не возвращают подсказки, которые, по моему мнению, должны. Например, oven mit
должно быть исправлено на oven mitt
, так как у меня есть документ в индексе со следующим docvalue_fields
для поля, которое я использую для генерации предлагаемых кандидатов:
"fields" : {
"sayt.shingle" : [
"holder",
"mitt",
"oven",
"oven mitt",
"pot",
"pot holder",
]
}
Одна возможная проблема Я думал о том, что я использую copy_to
для добавления терминов в поле sayt
из 3 источников, но он работает для других запросов (pot holde
исправляет до pot holder
).
Отображения :
{
"settings": {
"analysis": {
"analyzer": {
"shingle_3": {
"tokenizer": "standard",
"filter": [
"lowercase",
"shingle_3"
]
}
},
"filter": {
"shingle_3": {
"type": "shingle",
"max_shingle_size": 3,
"min_shingle_size": 2,
"output_unigrams": "true",
"filler_token": ""
}
}
}
},
"properties": {
"sayt": {
"type": "text",
"index": true,
"store": true,
"fields": {
"shingle": {
"fielddata": true,
"analyzer": "shingle_3",
"type": "text"
}
}
}
}
}
Запрос:
{
"suggest": {
"didYouMean": {
"text": "oven mit",
"phrase": {
"direct_generator": [
{
"field": "sayt.shingle",
"max_edits": 1,
"min_word_length": 1,
"suggest_mode": "always"
}
],
"field": "sayt.shingle",
"size": 5
}
}
}
}
А вот вывод:
"suggest" : {
"didYouMean" : [
{
"text" : "oven mit",
"offset" : 0,
"length" : 8,
"options" : [ ]
}
]
}