Я работал над преобразованием кода 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, но это не сработало. Кто-нибудь может посоветовать?
Поддержка IndexMany()
с завернутыми BulkParameters
была удалена в NEST 1.0.0 beta 1
Если вы хотите использовать массив с более расширенными параметрами, теперь вам нужно использовать команду Bulk()
.
Бета, к сожалению, все еще поставляется с классом BulkParameters
в сборке
С тех пор это было удалено в ветке разработки и будет выпущено в следующем бета-обновлении.
Так что теперь происходит то, что вы на самом деле индексируете документы типа "bulkparameters''1''"
а не "stock"
с установленными отдельными "bulkparameters''1''"
массовых метаданных.
См. Здесь пример использования Bulk()
для индексации множества объектов одновременно при настройке дополнительных параметров для отдельных элементов.