У меня есть два индекса: X и Y
Мне нужно выполнить поиск по индексу X и запустить подсказку по Y.
Картографирование для Y
$config['params']['suggestion']['body']['mappings']['suggester'] = [
'properties' =>
[
'search_id' => [
'type' => 'string',
'index' => 'not_analyzed'
],
'autosuggest_query' => [
'type' => 'completion',
"analyzer" => "my_suggester_analyzer",
"search_analyzer" => "my_suggester_analyzer",
"preserve_separators" => "false",
"preserve_position_increments" => "false",
"payloads" => true
],
'product_count' => [
'type' => 'integer',
],
'search_count' => [
'type' => 'integer',
]
]
Я ищу товары в X, получаю агрегированные данные и в том же запросе запускаю подсказку для поиска предыдущих запросов по индексу Y (автозаполнение запроса)
Запрос:
GET _search
{
"query": {
"filtered": {
"query": {
"bool": {
"should": {
"multi_match": {
"type": "phrase",
"query": "dinning table cover",
"fields": [
"q1^20",
"q2^10"],
"slop": "3"}
}
}
}
}
},
"size": 0,
"aggs": {
"category_L1": {
"terms": {
"field": "product_root_category_slug",
"size": 2,
"min_doc_count": 1
},
"aggs": {
"category_L2": {
"terms": {
"field": "product_main_category_slug",
"size": 1,
"min_doc_count": 1
},
"aggs": {
"category_L3": {
"terms": {
"field": "category_slug",
"size": 1,
"min_doc_count": 1
},
"aggs": {
"cat_name": {
"terms": {
"field": "category.raw"}
}
}
}
}
}
}
}
},
"suggest": {
"suggester_a": {
"text": "dinning table cover",
"completion": {
"field": "autosuggest_query",
"fuzzy": {
"fuzziness": 0
}
}
}
}
Я получаю исключение
["failures"]=>
array(1) {
[0]=>
array(4) {
["index"]=>
string(18) "X"["shard"]=>
int(0)
["status"]=>
int(500)
["reason"]=>
string(83) "ElasticsearchException[Field [autosuggest_query] is not a completion suggest field]"}
}
Кто-нибудь?
Спасибо
Я не знаю, является ли ваш случай верным (запустите запрос на X и подсказку на Y), но если вы внимательно посмотрите трассировку исключения, вы увидите, что он не работает X
индекс:
...
["index"]=>
string(18) "X"["shard"]=>
...
В документации сказано:
Предложения собираются на этапе запроса
так что я думаю, что это исключение, потому что он выполняет запрос на X
Индекс и не могу найти это поле на нем.
Других решений пока нет …