代码之家  ›  专栏  ›  技术社区  ›  Prerak Tiwari

基于Java代码的PDF文件索引检索

  •  0
  • Prerak Tiwari  · 技术社区  · 6 年前

    我试图用Java代码在弹性搜索6.3.2中索引PDF文件。到目前为止,我已经编写了以下代码来将PDF保存在ES中。代码运行良好,我可以将PDF的base64编码字符串保存在es中。我想知道我所采用的方法是否正确?有更好的方法吗? 以下是我的代码:

                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();
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   dadoonet    6 年前

    1. ingest pipeline ingest attachment plugin
    2. binary data type

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

    FSCrawler