cancel
Showing results for 
Search instead for 
Did you mean: 

Problema Lucene con filtros con guión y punto

joseacc
Champ in-the-making
Champ in-the-making
Buenas,

He detectado un problema al realizar consultas Lucene filtrando con guión o con punto.

Os pongo en situación con un ejemplo.

La definición del metadato es …
<property name="reg:codigo">
<title>Código</title>
<type>d:text</type>
<mandatory>false</mandatory>
</property>

Ejemplos de valores de ese metadato…
Z-2010-00001
Z-2010-00002
Z-2010-00003

Mi implementación de búsqueda Lucene con java…
SearchParameters sp = new SearchParameters();
sp.setLanguage(SearchService.LANGUAGE_LUCENE);

String query = new String("PATH:\"/app:company_home/st:sites/cm:misitio//*\" AND @reg\\:codigo:\"Z-2010-*\"");
ResultSet resultsLucene = webScriptHelper.getServices().getSearchService().query(sp);

Con el filtro  @reg\\:codigo:\"Z-2010-*\" no me devuelve ningún registro, sin embargo con el filtro @reg\\:code:\"Z-2010-0*\" si me devuelve.

Parece que si pongo el asterísco junto al guión o un punto el filtro no trabaja. He probado con @reg\\:codigo:\"Z\-2010\-*\" pero nada.

Tengo configurado el idioma Español en Alfresco y uso la versión Community v3.2r (build 2384, schema=3003) - Entorno tomcat preconfigurado.

¿Alguna idea?

Un saludo
8 REPLIES 8

baskeyfield
Champ in-the-making
Champ in-the-making
Buenas,

Yo tuve un problema similar, y era por utilizar el analizador en castellano, ya que las búsquedas las hace con el analizador standard.

Puedes probar esto:

Edita : WEB-INF/classes/alfresco/model/dataTypeAnalyzers_es.properties

Comenta las dos sentencias de los analizadores y pon:

d_dictionary.datatype.d_text.analyzer=org.alfresco.repo.search.impl.lucene.analysis.AlfrescoStandardAnalyser
d_dictionary.datatype.d_content.analyzer=org.alfresco.repo.search.impl.lucene.analysis.AlfrescoStandardAnalyser

Despues en global.repository.properties pon un:
index.recovery.mode=FULL

Y reinicia. Comprueba si te sigue fallando el problema con las búsquedas lucene.

Un saludo.

joseacc
Champ in-the-making
Champ in-the-making
Buenas,

Antes de nada agradecerte tu respuesta.

Eso mismo ya lo probé cuando me documenté del problema pero no me dió resultado. No sé si la versión de Alfresco puede ser el problema. Cuando detectaste el problema, ¿cuál era la versión que usabas?

Por cierto, también me ocurre con filtros con barras inclinadas a la derecha "/*".

Un saludo

baskeyfield
Champ in-the-making
Champ in-the-making
Buenas,

Mi versión era la 3.2 Community.

¿Desde la búsqueda avanzada te funciona?

¿Y poniendo esa consulta de lucene desde el administrador de nodos?

Saludos.

joseacc
Champ in-the-making
Champ in-the-making
Buenas,

Ya dí con la solución.

Si no se usan las comillas en el filtro, la búsqueda se hace correctamente. Por ejemplo, @reg\\:codigo:Z-2010-*

Pensaba que las comillas eran necesarias para filtrar metadatos de tipo string pero parece que no.

Un saludo y gracias

venzia
Star Collaborator
Star Collaborator
Si no me equivoco, al usar comillas estas realizando una busqueda exacta .. cosa incompatible con el uso de wildcards (al final busca el * como un caracter mas de la cadena y no como un comodín).
Saludos,

joseacc
Champ in-the-making
Champ in-the-making
Buenas Javier,

Si filtro por @reg\\:codigo:"Z-2*" si me devuelve registros pero si filtro @reg\\:codigo:"Z-*" no me devuelve nada.

Por lo tanto, lo que me planteas de que las comillas representan una búsqueda exacta en el primer filtro no me debería devolver nada pero si lo hace.

Un saludo

venzia
Star Collaborator
Star Collaborator
En cuanto a las comillas puede que tengas razon, por eso digo "si no me equivoco" (cosa que pasa :mrgreen: ) .. aunque me suena haberlo leido recientemente.
Echale un vistazo al siguiente post http://forums.alfresco.com/en/viewtopic.php?t=4776
Ten en cuenta que lucene "tokeniza" algunos metadatos tipo text por defecto, como el nombre, titulo y descripción.
Esto lo que hace es desglosar string en partes que el sistema entiende lógicas. Luego esta el tema de los stammps, que viene a ser el procedimiento por el cual lucene almacena las palabras raiz para permitir el uso de derivadas. Por ejemplo, si subes un documento que recoge en el titulo España, lucene guardará como palabra raiz Españ, de esta forma te devolvería el documento si buscas por España, Español, Española, .. esto último no es tu caso (además que el stammp debe ser definido si no me equivoco) .. de todas forma ahi queda.
La pena es q ahora mismo no esta el wiki disponible, creo que habia material interesante al respecto .. a ver si recuerdo luego echarle un vistazo y traer estos articulos.
Te dejo un post en el que cesar comenta algun detalle interesante http://forums.alfresco.com/es/viewtopic.php?f=11&t=2295&p=9168&hilit=lucene#p9168
Saludos y suerte!

joseacc
Champ in-the-making
Champ in-the-making
Mucha gracias Javier.

Le echo un vistazo a todo y os cuento. De todas formas he puesto un ticket en el JIRA al respecto, a ver si algún gurú de Alfresco me ilumina.