使用 Java 代码在 ElasticSearch 中索引 PDF 文件

普瑞克·蒂瓦里

我正在尝试使用 Java 代码在弹性搜索 6.3.2 中索引 PDF 文件。到目前为止,我已经编写了以下代码来将 pdf 保存在 ES 中。代码运行良好,我能够在 ES 中保存我的 PDF 的 Base64 编码字符串。我想了解我所遵循的方法是否正确?有没有更好的方法来做到这一点?以下是我的代码:

            InputStream inputStream = new FileInputStream(new File("mypdf.pdf"));
        try {
            byte[]  fileByteStream = IOUtils.toByteArray(inputStream );
            String base64String = new String(Base64.getEncoder().encodeToString(fileByteStream).getBytes(),"UTF-8");
            String strEncoded = Base64.getEncoder().encodeToString( base64String.getBytes( "utf-8" ));
            this.stream.close();

                    JSONObject correspondenceNode = new JSONObject(); 
                    correspondenceNode.put("data",strEncoded );

                    String strSsonValues = correspondenceNode.toString();
                    HttpEntity entity = new NStringEntity(strSsonValues , ContentType.APPLICATION_JSON);
                    elasticrestClient.put("/2018/documents/"1, entity);

        } catch (IOException e) {
            e.printStackTrace();
        }

基本上我在这里做的是,我将 PDF 文档转换为 Base64String 并将其保存到 ES 中,在阅读时,我将其转换回来。

下面是解码的代码:

String responseBody = elasticrestClient.get("/2018/documents/1");
//some code to fetch the hits
JSONObject h = hitsArray.getJSONObject(0);
source = h.getJSONObject("_source");
String object = (source.getString("data"));
byte[] decodedStr = Base64.getDecoder().decode( object );

FileOutputStream fos = new FileOutputStream("download.pdf");
fos.write(Base64.getDecoder().decode(new String( decodedStr, "utf-8" )));
fos.close();
达多网

在 elasticsearch 中存储 BASE64 内容可能是正确的,但这里可能会丢失一些部分:

  1. 您没有按照 Elasticsearch 中的说法“索引”PDF。如果你想这样做,你需要定义一个摄取管道并使用摄取附件插件从 PDF 中提取内容。
  2. 您没有谈到您正在使用的映射。如果您“真的”想要保留二进制内容,您可能需要将 BASE64 字段定义为二进制数据类型
  3. 在我看来,使用 elasticsearch 来存储这样的大 blob 并不是一个好主意。

相反,我会提取文本和元数据并索引该 + 二进制文件本身的 URL。喜欢:

{
  "content": "Extracted text here",
  "meta": {
    // Meta data there
  },
  "url": "file://path/to/file"
}

您还可以查看FSCrawler(包括它的代码),它基本上是这样做的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用Nest 2在Elasticsearch 2中索引pdf文件

通过Java代码在Elasticsearch中使用inguest-attachment插件为pdf / word编制索引

如何在ElasticSearch中索引.PDF文件

如何使用摄录附件插件在Elasticsearch 5.0.0中索引pdf文件?

使用Python在Elasticsearch中索引JSON文件?

从Java代码创建PDF文件[不使用iText]

如何使用PHP上传pdf文件中的代码

ElasticSearch-使用Java API为大型文件编制索引

使用Elasticsearch索引日志文件

如何使用Elasticsearch提取附件插件为pdf文件编制索引?

在PDF文件中使用JavaScript代码的文档

使用C ++代码复制.pdf文件

使用Java生成pdf文件

使用 PDDocument 在 Java 中创建 PDF 文件会导致 PDF 文件损坏

如何使用 java 区分 PDF 文件中的文本和图像?

使用Java在Excel中读取嵌入式pdf文件

使用Java代码读取hadoop中的csv文件格式

如何使用JSP 2避免JSP文件中的Java代码?

如何使用Java代码锁定android中的文件?

使用TDD开发Java中的文件遍历代码

如何使用 elasticsearch 5.5.1 索引文件

如何通过使用程序(Java代码)运行Jmeter测试来在Java代码中设置CSV文件?

如何使用php readfile代码在新标签页中打开PDF文件(wysiwyg)

使用PHP代码将PJL命令添加到PDF文件中

如何在rmakdown中包含外部代码文件以使用sintax高亮显示为pdf输出

使用Java中的elasticSearch 2.3.3按索引名称和类型删除索引

使用htaccess防止对PDF文件建立索引

尝试使用 java 签署 pdf 文档。为什么 PDF 文件中的签名无效?

如何使用Java在每个pdf文件中具有不同索引的两个字符串之间获取字符串