RoutingMissingException с использованием NEST IndexMany <>

1

Я работал над преобразованием кода ElasticSearch (ES) 0.9 для работы с ES 1.0. Это потребовало обновления NEST до последней версии до выпуска.

Я пытаюсь навалом индексировать набор дочерних документов. Я установил их отображение как:

"stocks": {           
            "_parent": {
                "type": "products"
            },
            "_timestamp": {
                "enabled": true
            },
            "properties": {
                "id": {
                    "type": "integer",
                    "index": "not_analyzed"
                },
                "stock": {
                    "type": "integer",
                    "index": "not_analyzed"
                }
            }
        }

Это было создано в ES 0.9. Когда я поместил это в ES 1.0, он автоматически добавит свойство Routing с обязательным значением "Обязательный" в значение "true". Поиск в Google предполагает, что это всегда необходимо для установки родительского дочернего документа, но свойство никогда явно не появлялось, когда я изучал документы в моем 0.9-осколке.

"Хорошо..." Я думаю про себя. Затем у меня есть следующий блок кода для NEST:

 var bulkParams = postQueue.Select(p => new BulkParameters<Stock>(p) { Parent = p.id.ToString()});
 IElasticsearchResponse c = ec.IndexMany(bulkParams, null, "stocks").ConnectionStatus;

Это возвращает исключение NullReferenceException. После некоторых догадок я добавил параметр Id в BulkParameters:

 var bulkParams = postQueue.Select(p => new BulkParameters<Stock>(p) { Id = p.id.ToString(), Parent = p.id.ToString()});

Кажется, что работает, но запрос возвращает ответ об ошибке от ES:

400 Bad Request с сообщением об ошибке JSON:

error = RoutingMissingException [маршрутизация требуется для [test_index]/[запасов]/[xx]]

(где xx - идентификатор документа)

Я предполагаю, что мне нужно вставить строку маршрутизации где-нибудь, но я не знаю, где. Я попытался добавить параметр "Маршрутизация" в BulkParameters, но это не сработало. Кто-нибудь может посоветовать?

Теги:
elasticsearch
nest

1 ответ

3
Лучший ответ

Поддержка IndexMany() с завернутыми BulkParameters была удалена в NEST 1.0.0 beta 1

Если вы хотите использовать массив с более расширенными параметрами, теперь вам нужно использовать команду Bulk().

Бета, к сожалению, все еще поставляется с классом BulkParameters в сборке

С тех пор это было удалено в ветке разработки и будет выпущено в следующем бета-обновлении.

Так что теперь происходит то, что вы на самом деле индексируете документы типа "bulkparameters''1''" а не "stock" с установленными отдельными "bulkparameters''1''" массовых метаданных.

См. Здесь пример использования Bulk() для индексации множества объектов одновременно при настройке дополнительных параметров для отдельных элементов.

  • 0
    Ссылка на пример 404

Ещё вопросы

Сообщество Overcoder
Наверх
Меню