AWS CloudSearch上传的PDF内容未编入索引

时间:2016-06-25 14:39:17

标签: amazon-web-services pdf amazon-cloudsearch

我正在尝试通过控制台将PDF上传到CloudSearch。添加文档时,内容无法有效搜索。控制台生成SDF格式的JSON,如下所示:

[ {
  "type" : "add",
  "id" : "Sample.pdf",
  "fields" : {
    "content_type" : "text/plain",
    "content_encoding" : "windows-1252",
    "resourcename" : "Sample.pdf",
    "content" : "%PDF-1.6\r\nCatalogx^½]ÛrÜ6�}Ÿ¯˜­ÊÃ{...}\r\n%%EOF"
  }
} ]

当我尝试搜索文档内容时,会出现上面可读的文本(" PDF","目录"),但不会出现任何"有用的"文件的内容。

我很惊讶地看到:

  • content/typetext/plain而不是appliation/pdf
  • 内容未编码为base64

然后,我手工制作了我自己的批处理XML文件,尝试相同的方法:

<batch>
    <add id="pdftest1">
        <field name="content_type">application/pdf</field>
        <field name="resourcename">Sample1.pdf</field>
        <field name="content">{copied from aws console output}</field>
    </add>
</batch>

<batch>
    <add id="pdftest2">
        <field name="content_type">application/pdf</field>
        <field name="resourcename">Sample2.pdf</field>
        <field name="content">{base64 encoded pdf contents}</field>
    </add>
</batch>

CloudSearch可以搜索&#34;有用的&#34; PDF的内容没有先将PDF转换为文本文件?

如果是这样,我做错了什么?

2016年6月27日编辑

CloudSearch command line interface生成通过将PDF转换为原始文本的批处理。不确定为什么AWS CloudSearch控制台不会这样做。

C:\Downloads>cs-import-documents --source .\Sample.pdf --output .\1.json

制备:

[ {
  "type" : "add",
  "id" : "xmlC:_Downloads_Sample.pdf",
  "fields" : {
    "content_type" : "application/pdf",
    "created" : "Fri Jun 17 11:14:45 EDT 2016",
    "resourcename" : "Sample.pdf",
    "content" : "6/17/2016 [... remaining text omitted for brevity ...]
  }
} ]

AWS documentation包括:

  

Amazon CloudSearch控制台提供了一种自动生成的方法   从几种常见文件类型中正确格式化的JSON或XML:PDF,   Microsoft Excel,Microsoft PowerPoint,Microsoft Word,CSV,文本和   HTML。

截至2016年6月24日,这似乎不正确(或者我在使用控制台时遗漏了一些内容)。

这给我留下了另一个问题:什么是一种合理有效的方法,每天将位于S3存储桶中的数百个新PDF放入CloudSearch?具体做法是:

  • CloudSearch API是否提供&#34; pdf-to-text&#34;作为他们的API的一部分?
  • 我必须使用CS CLI执行转换吗?

如果建议使用CLI,那么这似乎效率低下(我假设)CLI必须从S3提取PDF,转换为文本,然后将生成的SDF推送到CloudSearch。看起来很奇怪,AWS不会提供针对CS的API调用,而这对我来说也是如此。也许他们确实提供了它并且我错过了它?

2 个答案:

答案 0 :(得分:0)

这里的问题相同。 我正在研究文档管理项目(C#,WPF) 并希望从S3上对CloudSearch上的大量PDF进行索引。

以下流程对我来说是我的要求。我无法找到任何其他解决方案。

  • 手动配置索引
    • 示例字段:'filename','text','path','modifieddate'
  • 将文档添加到CloudSearch的代码

    // Find all files in root folder create index on them
            List<string> lstFiles = listAllFilesOnCloud("[BucketName]");
    
            foreach (string strFile in lstFiles)
            {
                string FileName = System.IO.Path.GetFileNameWithoutExtension(strFile);
                string Text = ExtractTextFromPdf("https://s3.amazonaws.com/" + strFile);
                string Path = strFile;
                DateTime ModifiedDate = DateTime.Now;
    
    
                string headerText = Text.Substring(0, Text.Length < 150 ? Text.Length : 150);
                foreach (var docs in ltDocumentTypes)
                {
                    if (headerText.ToUpper().Contains(docs.searchText.ToUpper()))
                    {
                        DocumentType = docs.DocumentType;
                        Vault = docs.VaultName; ;
                    }
                }
    
                if (string.IsNullOrEmpty(DocumentType))
                {
                    DocumentType = "Default";
                    Vault = "Default";
                }
    
                IndexDocument docDetail = new IndexDocument();
                docDetail.filename = FileName;
                docDetail.text = Text;
                docDetail.path = Path;
                docDetail.modifieddate = ModifiedDate;
    
                UploadDcoumentOnCloudSearch(docDetail);
            }
    

使用ITexSharp来提取文本格式pdf。

答案 1 :(得分:0)

最后,我能够让它发挥作用!它对我有用的方式是我们的cs-import-documents AWS Cloudsearch命令。 cs-import-documents --source“c:\ test.pdf” - output“C:\ test.sdf”

它生成了一个.json文件。我通过控制台将此上传到Cloudsearch,并提供搜索结果。

祝你好运, 拉吉