首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >用Java代码索引ElasticSearch格式的文件

用Java代码索引ElasticSearch格式的文件
EN

Stack Overflow用户
提问于 2018-08-01 03:10:26
回答 1查看 1.3K关注 0票数 0

我正在尝试使用Java代码在elastic search 6.3.2中索引PDF文件。到目前为止,我已经编写了以下代码在ES中保存pdf。代码运行良好,我能够保存我的Base64编码的字符串在ES中。我想知道我所遵循的方法是正确的还是错误的?有没有更好的方法呢?以下是我的代码:

代码语言:javascript
复制
            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();
        }

基本上,我在这里做的是,我正在转换的Base64String文件,并保存为ES,而阅读,我正在转换它回来。

解码代码如下:

代码语言:javascript
复制
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();
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-01 04:28:46

在elasticsearch中存储BASE64内容可能是正确的,但这里可能缺少一些内容:

  1. 你没有像Elasticsearch中说的那样“索引”该文件。如果你想这样做,你需要定义一个ingest pipeline并使用这个ingest attachment plugin从PDF中提取内容。
  2. 你没有提到你正在使用的映射。如果您“真的”想要保留二进制内容,那么您可能希望将binary data type.
  3. It字段定义为BASE64,因为在我看来,使用elasticsearch来存储像这样的大blob是个好主意。

相反,我会提取文本和元数据,并将其与二进制文件本身的URL建立索引。像这样:

代码语言:javascript
复制
{
  "content": "Extracted text here",
  "meta": {
    // Meta data there
  },
  "url": "file://path/to/file"
}

你也可以看看FSCrawler (包括它的代码),它基本上做到了这一点。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51620450

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档