AnsweredAssumed Answered

Búsquedas case insensitive y Filters

Question asked by spilby on Jan 19, 2016
Latest reply on Jan 22, 2016 by spilby
Buenas,

tengo un problema que hace tiempo que no logro resolver, y compienza a ser ya vital solucionarlo.

Utilizo Alfresco 4.2.5.1. Necesito hacer búsquedas de metadatos que sean Case Insensitive, para encontrar cadenas ya sea en mayúsculas o en minúsculas.

Las búsquedas las realizo mediante ALFRESCO-FTS. Como ejemplo, utilizo el navegador de nodos del Share para probar. Son búsquedas de este estilo:

TYPE:"loquesea" AND =@exp\:exp_name:"Test 2016"

El problema es que no me busca indistintamente de las mayúsculas/minúsculas. Si tengo un "TEST 2016" y busco un "test 2016" no me lo encontrará, y necesito que me lo encuentre.

Si elimino el "=" que precede al campo a buscar en la query sí que hace la búsqueda insensitive, pero necesito de ese "=" ya que quiero buscar la cadena exacta, no parte de la cadena.

En mi modelo ese campo está definido así:


<property name="exp:exp_name" editVisible="true" createVisible="true" editable="true" inheritable="false" calculable="true">
   <title>Number exp</title>
   <type>d:text</type>
   <mandatory>true</mandatory>
   <index enabled="true">
       <atomic>false</atomic>
       <stored>false</stored>
       <tokenised>both</tokenised>
   </index>
</property>   


He hecho una prueba y cambiado el tokenised a false, para evitar tener que poner el "=" en la query, pero si lo pongo a false vuelve a ser case sensitive. Parece que lo que lo convierte en insensitive es el tokenised a both (o true).

Leí en un foro que inviertiendo el orden de los filtros LowerCaseFilterFactory y WordDelimiterFilterFactory en el schema.xml del solr lo conseguiría, pero lo he hecho y no funciona.


<schema name="alfresco" version="1.0">
   <types>
      <fieldType name="alfrescoDataType" class="org.alfresco.solr.AlfrescoDataType">
         <analyzer>
            <tokenizer class="org.apache.solr.analysis.WhitespaceTokenizerFactory" />
            <filter class="org.apache.solr.analysis.LowerCaseFilterFactory" />
            <filter class="org.apache.solr.analysis.WordDelimiterFilterFactory"
                    generateWordParts="1"
                    generateNumberParts="1"
                    catenateWords="1"
                    catenateNumbers="1"
                    catenateAll="1"
                    splitOnCaseChange="1"
                    splitOnNumerics="1"
                    preserveOriginal="1"
                    stemEnglishPossessive="1"/>
         </analyzer>
      </fieldType>
   </types>
   <fields>
      <field name="ID" type="alfrescoDataType" indexed="true" omitNorms="true" stored="true" multiValued="true"></field>
      <dynamicField name="*" type="alfrescoDataType" indexed="true" omitNorms="true" stored="true" multiValued="true"></dynamicField>
   </fields>
   <uniqueKey>ID</uniqueKey>
   <defaultSearchField>ID</defaultSearchField>
</schema


Además, la búsqueda puede ser tanto transaccional (directo a la BD) como por SOLR, por lo que entiendo que incluso resolviendo este problema en el fichero del solr seguiría teniéndolo cuando sea transaccional y no use SOLR.

He visto también que el dataTypeAnalyzer_es.properties utiliza SpanishSnowballAnalyser

Estoy seguro que de algún modo se puede configurar para que las búsquedas sean siempre case insensitive.

¿Qué puedo hacer para configurarlo?

Merci!

Outcomes