AWS CloudSearch не может загружать документы

Я новичок в AWS и CloudSearch. Я написал очень простое приложение для загрузки документа docx (уже использую cs-import-document для преобразования в формат JSON) в мой поисковый домен.

Код очень прост:

using (var searchdomainclient = new AmazonCloudSearchDomainClient("http://search-xxxxx-xysjxyuxjxjxyxj.ap-southeast-2.cloudsearch.amazonaws.com"))
{

    // Test to upload doc                            

    var uploaddocrequest = new UploadDocumentsRequest()
    {
        FilePath = @"c:\temp\testsearch.sdf",  //docx to JSON already
        ContentType =  ContentType.ApplicationJson

    };
    var uploadresult = searchdomainclient.UploadDocuments(uploaddocrequest);

   }

Однако у меня есть исключение: «Отсутствует корневой элемент».

Вот материал JSON в файле sdf, который я хочу загрузить:

[{
    "type": "add",
    "id": "c:_temp_testsearch.docx",
    "fields": {
        "template": "Normal.dotm",
        "application_name": "Microsoft Office Word",
        "paragraph_count": "1",
        "resourcename": "testsearch.docx",
        "date": "2014-07-28T23:52:00Z",
        "xmptpg_npages": "1",
        "page_count": "1",
        "publisher": "",
        "creator": "John Smith",
        "creation_date": "2014-07-28T23:52:00Z",
        "content": "Test5",
        "author": "John Smith",
        "last_modified": "2014-07-29T04:22:00Z",
        "revision_number": "3",
        "line_count": "1",
        "application_version": "15.0000",
        "last_author": "John Smith",
        "character_count": "5",
        "character_count_with_spaces": "5",
        "content_type": "application/vnd.openxmlformats-officedocument.wordprocessingml.document"
    }
}]

Так что не так с моим подходом?

Огромное спасибо!

P.S. Я могу вручную загрузить документ docx в этот поисковый домен и использовать код C# для применения поиска.




============= Обновление 2014-08-04 ====================

Я не уверен, связано ли это с этим или нет. В трассировке стека я обнаружил, что он пытается анализировать файл XML, а не JSON. Но в моем коде я уже установил ContentType = JASON, но, похоже, безрезультатно.

at System.Xml.XmlTextReaderImpl.ThrowWithoutLineInfo(String res)
at System.Xml.XmlTextReaderImpl.ParseDocumentContent()
at Amazon.Runtime.Internal.Transform.XmlUnmarshallerContext.Read()
at Amazon.Runtime.Internal.Transform.ErrorResponseUnmarshaller.Unmarshall(XmlUnmarshallerContext context)
at Amazon.Runtime.Internal.Transform.JsonErrorResponseUnmarshaller.Unmarshall(JsonUnmarshallerContext context)
at Amazon.CloudSearchDomain.Model.Internal.MarshallTransformations.UploadDocumentsResponseUnmarshaller.UnmarshallException(JsonUnmarshallerContext context, Exception innerException, HttpStatusCode statusCode)
at Amazon.Runtime.Internal.Transform.JsonResponseUnmarshaller.UnmarshallException(UnmarshallerContext input, Exception innerException, HttpStatusCode statusCode)
at Amazon.Runtime.AmazonWebServiceClient.HandleHttpWebErrorResponse(AsyncResult asyncResult, WebException we)
at Amazon.Runtime.AmazonWebServiceClient.getResponseCallback(IAsyncResult result)
at Amazon.Runtime.AmazonWebServiceClient.endOperation[T](IAsyncResult result)
at Amazon.CloudSearchDomain.AmazonCloudSearchDomainClient.EndUploadDocuments(IAsyncResult asyncResult)
at Amazon.CloudSearchDomain.AmazonCloudSearchDomainClient.UploadDocuments(UploadDocumentsRequest request)


at Amazon.CloudSearchDomain.Model.Internal.MarshallTransformations.UploadDocumentsResponseUnmarshaller.UnmarshallException(JsonUnmarshallerContext context, Exception innerException, HttpStatusCode statusCode)

person Samuel    schedule 01.08.2014    source источник
comment
Я видел, что вы можете загружать богатые документы в CloudSearch. Необходимо вручную конвертировать их в формат json, когда вы используете java?   -  person    schedule 07.12.2014
comment
Как вы можете подключить конечную точку к new AmazonCloudSearchDomainClient( ?   -  person Cristal    schedule 04.05.2018


Ответы (2)


Идентификатор вашего документа содержит недопустимые символы (точка и двоеточие). Из https://aws.amazon.com/articles/8871401284621700:

Идентификатор должен быть уникальным для всех документов, которые вы загружаете в домен, и может содержать следующие символы: az (строчные буквы), 0–9 и символ подчеркивания (_). Идентификаторы документов должны начинаться с буквы или цифры и могут содержать до 64 символов.

Также неясно, на какую конечную точку вы отправляете сообщения, но у вас также может быть проблема там.

person alexroussos    schedule 04.08.2014
comment
Привет, alexroussos, спасибо, что указали на неверный идентификатор. Однако даже после того, как я его изменил, все та же ошибка: корневой элемент отсутствует.... - person Samuel; 04.08.2014
comment
Какую конечную точку вы нажимаете? Я вижу ваш поисковый домен, но должна быть конечная точка, например /2013-01-01/documents/batch. - person alexroussos; 04.08.2014
comment
На странице домена AWS я увидел конечную точку поиска, конечную точку документа и ARN домена. Итак, какой URL мне следует использовать? - person Samuel; 05.08.2014
comment
Конечная точка поиска предназначена для запросов, конечная точка документа предназначена для отправки файлов SDF (в данном случае используйте последнюю). - person alexroussos; 06.08.2014

У меня было точно такое же исключение с SDK версии 2.2.2.0. Когда я обновил SDK до версии 2.2.2.1, исключение исчезло.

person vadym    schedule 06.08.2014