GOOGLE ADS

воскресенье, 24 апреля 2022 г.

ElasticSearch не может получить несколько значений подсказки из одного и того же документа

Не могли бы вы мне помочь?

У меня проблема с 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), которая может посещать предложения в порядке их оценок и досрочно завершает запрос, как только будет найдено достаточное количество документов.

Комментариев нет:

Отправить комментарий

Laravel Datatable addColumn returns ID of one record only

Я пытаюсь использовать Yajra Datatable для интеграции DataTable на свой веб-сайт. Я смог отобразить таблицу, но столкнулся с проблемой. В по...