Búsqueda de txt con Lucene

cancel
Showing results for 
Search instead for 
Did you mean: 
spilby
Active Member II

Búsqueda de txt con Lucene

Buenas,

he implementado mediante Java y la api que proporciona Alfresco unos métodos para la subida de ficheros, entre ellos, archivos txt y pdf.

Pero a la hora de buscar una cadena de texto entre los ficheros subidos, ya sea buscando mediante el explorador de nodos (TEXT:\"cadena"), o usando la lupa que aparece en el propio cliente web de Alfresco, no me encuentra los txt. Con los pdf no hay problema, busco el texto, y me lo encuentra. Pero con los txt no hay manera, a pesar de utilizar exactamente el mismo método de subida. Uno como application/pdf y el otro como plain/text.

¿A alguien se le ocurre qué puede estar pasando? ¿Hay algo a considerar en la subida de txt que no sea necesario con los pdf? ¿Funciona la búsqueda de forma distinta?

Merci!
15 Replies
cristinamr
Advanced

Re: Búsqueda de txt con Lucene

Buenos días.

Hace algún tiempo vi un problema similar y el problemva venía por el mimetype asociado a los documentos. ¿Podrías verificar que dependiendo del archivo que subas le pones correctamente el mimetype que le corresponda?  Por ejemplo, sería algo así:

//write content to the file 
File file = new File("C:/Temp/Test.doc");
ContentService contentService = serviceRegistry.getContentService();
ContentWriter writer = contentService.getWriter(content,
ContentModel.PROP_CONTENT, true);

String mimeType ="text/plain"; writer.setMimetype(mimeType);
writer.putContent(file);



De todas formas eso de que buscas en el explorador de nodos y no lo encuentras es raro raro… ¿Lo consigues ver por el web-browser de alfresco?

Un saludo.
--
VenziaIT: helping companies since 2005! Our ECM products: AQuA & Seidoc
spilby
Active Member II

Re: Búsqueda de txt con Lucene

Buenas,

te pongo aquí el valor de los principales metadatos que tienen ambos ficheros. El primero es el subido manualmente desde la web de alfresco:

{http://www.alfresco.org/model/content/1.0}name expediente 2.txt
{http://www.alfresco.org/model/system/1.0}node-dbid 1953
{http://www.alfresco.org/model/system/1.0}store-identifier SpacesStore
{http://www.alfresco.org/model/system/1.0}node-uuid c7dae1de-1231-4b66-9e52-2e15739215d0
{http://www.alfresco.org/model/content/1.0}content contentUrl=store://2010/11/8/18/56/9862e934-e320-4748-a139-ae3a9bcf4c16.bin|mimetype=text/plain|size=44|encoding=UTF-8|locale=en_US_
{http://www.alfresco.org/model/content/1.0}title expediente 2.txt
{http://www.alfresco.org/model/system/1.0}store-protocol workspace

Y el segundo mediante mi código Java:

{http://www.alfresco.org/model/content/1.0}name UDS B2.txt
{http://www.alfresco.org/model/system/1.0}node-dbid 1954
{http://www.alfresco.org/model/system/1.0}store-identifier SpacesStore
{http://www.alfresco.org/model/system/1.0}node-uuid ad5c00f1-1900-4c2c-b9c9-1e90e8eeabd0
{http://www.alfresco.org/model/content/1.0}content contentUrl=store://2010/11/8/19/4/2603c9f8-03a4-4710-9080-55ae67919b3a.bin|mimetype=text/plain|size=44|encoding=UTF-8|locale=es_ES_
{http://www.alfresco.org/model/system/1.0}store-protocol workspace
{http://www.alfresco.org/model/content/1.0}doc_extension
{http://www.alfresco.org/model/content/1.0}doc_contentType text/plain

En principio el mimetype es correcto, ya que es text/plain. También añado un metadato de contentType con lo mismo.

Una cosa, cuando me refiero a que desde el explorador de nodos no me lo encuentra, me refiero a la búsqueda. Es decir, navegando sí encuentro el fichero. Pero cuando en la búsqueda por lucene le pongo el TEXT:\"cadena", sólo me encuentra el txt que he subido manualmente, no el mío. Si busco por otros criterios, como el name, o la fecha, sí aparece. Pero el TEXT no hay manera… Con un pdf no hay problema, pero con el txt, es como si no supiera buscar por contenido
fegor
Senior Member

Re: Búsqueda de txt con Lucene

Mira si te funciona perfectamente cuando subes ficheros de texto y pdf mediante la inteface web, /alfresco o /share.

¿Puedes poner parte de la clase?

Activa las líneas de depuración de Lucene en el fichero log4j.properties para verificar que te los está indexando.

Un saludo.
fegor
Senior Member

Re: Búsqueda de txt con Lucene

Veo una diferencia importante y que tiene que ver a la hora de buscar mediante texto en Alfresco, es la propiedad "locale", si te fijas una está en inglés y la otra en español, a la hora de buscar mediante "token" te va a dar resultados distintos según el lenguaje en el que estés realizando las búsquedas.

Un saludo.
cristinamr
Advanced

Re: Búsqueda de txt con Lucene

Veo una diferencia importante y que tiene que ver a la hora de buscar mediante texto en Alfresco, es la propiedad "locale", si te fijas una está en inglés y la otra en español, a la hora de buscar mediante "token" te va a dar resultados distintos según el lenguaje en el que estés realizando las búsquedas.

Justo es lo que iba a comentarle Smiley Wink

Ojealo porque es bastante probable que vengan por ahí los tiros. A parte, iba a proponerte, para descartarque esté el problema en la subida de los mismos, que navegaras a través del node-browser y buscaras "a pelo" el documento: Esto se hace navegando a través de los enlaces que tienes disponibles en el node-browser, una vez te metes en el workspace://SpacesStore, apareces en la raiz de alfresco, pues bien, si miras abajo tienes enlaces a los nodos hijos (en Children), sería simplemente ir navegando a través de estos enlaces hasta donde esté subido un documento que te esté dando el problema y verificar que está ahí ese nodo creado (y sus propiedades).

Pero vamos, que sabiendo que tienen idioma diferentes y buscas en ES, creo que lo primero que deberías probar es a cuando subas un archivo, independientemente de que sea pdf o txt, le metas que el idioma es es-ES así no tendrás problema a la hora de buscarlo si por defecto buscas en español.


Un saludo.
--
VenziaIT: helping companies since 2005! Our ECM products: AQuA & Seidoc
spilby
Active Member II

Re: Búsqueda de txt con Lucene

Buenas,

antes que nada muchas gracias por las respuestas.

Cuando subo mediante la interfaz web la búsqueda me la hace bien, me ocurre sólo cuando lo hago mediante mi código.

Os pongo aquí la parte que se encarga de la subida:

RepositoryServiceSoapBindingStub repositoryService = WebServiceFactory.getRepositoryService();

String contentData = AlfrescoContentUtils.putContent(file, fileNameAlfresco);

Reference ref = new Reference(store, cmFile.getId(), null);
Predicate predicate = new Predicate(new Reference[] { ref }, null, null);

NamedValue[] fileProperties = AlfrescoServiceHelper.getFileNodeProperties(contentData, cmFile);

CMLUpdate update = new CMLUpdate(fileProperties, predicate, null);
CML cml = new CML();
cml.setUpdate(new CMLUpdate[] { update });

UpdateResult[] updateResult = repositoryService.update(cml);


Utilizo el putContent ya que para archivos grandes no dá problemas. El método (de Alfresco, no es propio) devuelve un string que se sube en el metadato content. Os pongo aquí la parte correspondiente a los metadatos, el getFileNodeProperties, que sí es un método propio.

public static NamedValue[] getFileNodeProperties(String content, CMFile cmFile) {
   
    ArrayList<NamedValue> propertiesArray = new ArrayList<NamedValue>();
   
    propertiesArray.add(Utils.createNamedValue(Constants.PROP_CONTENT, content));
    propertiesArray.add(Utils.createNamedValue(ArchivoConstants.DOC_EXTENSION, cmFile.getExtension()));
    propertiesArray.add(Utils.createNamedValue("{http://www.alfresco.org/model/content/1.0}doc_contentType", cmFile.getContentType()));
    propertiesArray.add(Utils.createNamedValue(Constants.PROP_NAME, cmFile.getName() + "." + cmFile.getExtension()));
   
    NamedValue[] properties = new NamedValue[propertiesArray.size()];
    return propertiesArray.toArray(properties);
  }


Respecto al idioma, la verdad es que me había fijado, pero al buscar una cadena de texto sin caracteres extraños, pensé que no influiría. De todas formas, si me podéis indicar, por favor, que constante es la referente al idioma o cómo especificarlo mediante el Utils.createNamedValue, os lo agradecería, porque no he encontrado la forma de hacerlo de esta manera.

Merci de nuevo!
fegor
Senior Member

Re: Búsqueda de txt con Lucene

Prueba una cosa para descartar que sea problema de tokens:

Quita los ficheros (renómbralos o muévelos) de analizadores por idiomas dataTypeAnalyzers_??.properties excepto el original dataTypeAnalyzers.properties que están en tomcat\webapps\alfresco\WEB-INF\classes\alfresco\model, vuelve a iniciar Alfresco y vuelve a subir documentos (no intentes buscar los que ya había).

Un saludo.
spilby
Active Member II

Re: Búsqueda de txt con Lucene

Prueba una cosa para descartar que sea problema de tokens:

Quita los ficheros (renómbralos o muévelos) de analizadores por idiomas dataTypeAnalyzers_??.properties excepto el original dataTypeAnalyzers.properties que están en tomcat\webapps\alfresco\WEB-INF\classes\alfresco\model, vuelve a iniciar Alfresco y vuelve a subir documentos (no intentes buscar los que ya había).

Un saludo.

El problema es que no puedo hacer eso… Es una aplicación para un cliente y no podemos modificar properties del servidor de alfresco. Solo dispongo de un jar, el alfresco-web.service-client.jar  Smiley Sad
spilby
Active Member II

Re: Búsqueda de txt con Lucene

No hay manera, me sigue pasando lo mismo y por más que investigo en google no veo qué puede pasar.

¿Sabéis cómo indicar el idioma (locale) haciendo algo del estilo Utils.createNamedValue("{http://www.alfresco.org/model/content/1.0}doc_contentType", cmFile.getContentType()); ?

Socorroooooo, jejeje.

Gracias.