Не могли бы вы мне помочь?
У меня проблема с Completion Suggester в ElasticSearch
Пример: у меня есть это сопоставление:
PUT music
{
"mappings": {
"properties": {
"suggest": {
"type": "completion"
},
"title": {
"type": "keyword"
}
}
}
}
и проиндексировать несколько предложений для документа следующим образом:
PUT music/_doc/1?refresh
{
"suggest": [
{
"input": "Nirva test",
"weight": 10
},
{
"input": "Nirva hola",
"weight": 3
}
]
}
Запрос: вы можете сделать этот запрос на кибане
POST music/_search?pretty
{
"suggest": {
"song-suggest": {
"prefix": "nirv",
"completion": {
"field": "suggest"
}
}
}
}
и в результате я получаю только первое значение, но не оба.
Я также провел тест на инструменте разработчика kibana, и это результат
{
"took": 1,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 0,
"relation": "eq"
},
"max_score": null,
"hits": [ ]
},
"suggest": {
"song-suggest": [
{
"text": "nir",
"offset": 0,
"length": 3,
"options": [
{
"text": "Nirvana test",
"_index": "music",
"_type": "_doc",
"_id": "1",
"_score": 10.0,
"_source": {
"suggest": [
{
"input": "Nirvana test",
"weight": 10
},
{
"input": "Nirvana best",
"weight": 3
}
]
}
}
]
}
]
}
}
ожидаемый результат:
"suggest": {
"song-suggest": [
{
"text": "nirvana",
"offset": 0,
"length": 7,
"options": [
{
"text": "Nirvana test",
"_index": "music",
"_type": "_doc",
"_id": "1",
"_score": 10.0,
"_source": {
"suggest": [
{
"input": "Nirvana test",
"weight": 10
},
{
"input": "Nirvana best",
"weight": 3
}
]
}
}
]
},
{
"text": "nirvana b",
"offset": 0,
"length": 9,
"options": [
{
"text": "Nirvana best",
"_index": "music",
"_type": "_doc",
"_id": "1",
"_score": 3.0,
"_source": {
"suggest": [
{
"input": "Nirvana test",
"weight": 10
},
{
"input": "Nirvana best",
"weight": 3
}
]
}
}
]
}
]
}
Решение проблемы
Это поведение по умолчанию для текущих реализаций. Вы можете проверить # 31738. Ниже приведен один из комментариев для объяснения, почему он возвращает только один документ/предложение.
Предложение завершения основано на документе, поэтому мы не можем вернуть одну запись для каждого подходящего предложения. Задокументировано, что он возвращает документы, а не предложения, и один вход может быть проиндексирован в нескольких предложениях (например, если у вас есть синонимы в вашем анализаторе), поэтому не так просто отличить совпадение от его вариантов. Кроме того, подсказчик завершения не посещает все предложения для выбора первых N, он имеет специальную структуру (взвешенную FST), которая может посещать предложения в порядке их оценок и досрочно завершает запрос, как только будет найдено достаточное количество документов.
Комментариев нет:
Отправить комментарий