Question

J'ai le flux de travail suivant dans mon (Web) Application:

  • Téléchargez un fichier PDF à partir d'une archive
  • indexez le fichier
  • Supprimer le fichier

Mon problème est qu'après indexation du fichier, il reste verrouillé et la partie de suppression jette une exception.

Voici mon code-code pour indexer le fichier:

try
{
   ContentStreamUpdateRequest req = new ContentStreamUpdateRequest("/update/extract");
   req.addFile(file, type);
   req.setAction(AbstractUpdateRequest.ACTION.COMMIT, true, true);

   NamedList<Object> result = server.request(req);

   Assert.assertEquals(0, ((NamedList<?>) result.get("responseHeader")).get("status"));
}

Est-ce que je manque quelque chose?

EDIT:

J'ai essayé de cette façon aussi, mais avec le même résultat ...

ContentStream contentStream = null;

    try
    {
      contentStream = new ContentStreamBase.FileStream(document);

      ContentStreamUpdateRequest req = new ContentStreamUpdateRequest(UPDATE_EXTRACT_REQUEST);
//      req.addFile(document, context.getProperty(FTSConstants.CONTENT_TYPE_APPLICATION_PDF));
      req.addContentStream(contentStream);
      req.setAction(AbstractUpdateRequest.ACTION.COMMIT, true, true);

      NamedList<Object> result = server.request(req);

      if (!((NamedList<?>) result.get("responseHeader")).get("status").equals(0))
      {
        throw new IDSystemException(LOG, "Document could not be indexed. Status returned: " +
                                         ((NamedList<?>) result.get("responseHeader")).get("status"));
      }
    }
    catch (FileNotFoundException fnfe)
    {
      throw new IDSystemException(LOG, fnfe.getMessage(), fnfe);
    }
    catch (IOException ioe)
    {
      throw new IDSystemException(LOG, ioe.getMessage(), ioe);
    }
    catch (SolrServerException sse)
    {
      throw new IDSystemException(LOG, sse.getMessage(), sse);
    }
    finally
    {
      try
      {
        if(contentStream != null && contentStream.getStream() != null)
        {
          contentStream.getStream().close();
        }
      }
      catch (IOException ioe)
      {
        throw new IDSystemException(LOG, ioe.getMessage(), ioe);
      }
    }

Était-ce utile?

La solution

Cela semble être un bug,

Un patch est proposé ici https://issues.apache.org/jira/browse/solr-1744

Aussi à la caisse http://lucène.472066.n3.nnstabable.com / ContenutreamupDaeQuest-Addfile-échoue-to-Close-Stream-TD485429.html

Vous pouvez vérifier si le flux n'est pas null et fermez-le.

Autres conseils

Il peut être dû au verrouillage acquis par le système de fichiers.Au lieu de AddFile (), vous pouvez essayer ce qui suit.

ContentStreamUpdateRequest req = new ContentStreamUpdateRequest("/update/extract");
ContentStreamBase.FileStream fileStream = new FileStream(file);
req.addContentStream(fileStream);

shishir

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top