我正在尝试通过控制台将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/type
为text/plain
而不是appliation/pdf
和然后,我手工制作了我自己的批处理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 ...]
}
} ]
Amazon CloudSearch控制台提供了一种自动生成的方法 从几种常见文件类型中正确格式化的JSON或XML:PDF, Microsoft Excel,Microsoft PowerPoint,Microsoft Word,CSV,文本和 HTML。
截至2016年6月24日,这似乎不正确(或者我在使用控制台时遗漏了一些内容)。
这给我留下了另一个问题:什么是一种合理有效的方法,每天将位于S3存储桶中的数百个新PDF放入CloudSearch?具体做法是:
如果建议使用CLI,那么这似乎效率低下(我假设)CLI必须从S3提取PDF,转换为文本,然后将生成的SDF推送到CloudSearch。看起来很奇怪,AWS不会提供针对CS的API调用,而这对我来说也是如此。也许他们确实提供了它并且我错过了它?
答案 0 :(得分:0)
这里的问题相同。 我正在研究文档管理项目(C#,WPF) 并希望从S3上对CloudSearch上的大量PDF进行索引。
以下流程对我来说是我的要求。我无法找到任何其他解决方案。
将文档添加到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,并提供搜索结果。
祝你好运, 拉吉