¿Cómo puedo crear una copia de un campo de cadena en forma insensible a las mayúsculas y minúsculas? Quiero usar el tipo típico de "cadena" y un tipo de distinción entre mayúsculas y minúsculas. Los tipos se definen así:¿Cómo crear una copia insensible a mayúsculas y minúsculas de un campo de cadena en SOLR?
<fieldType name="string" class="solr.StrField"
sortMissingLast="true" omitNorms="true" />
<!-- A Case insensitive version of string type -->
<fieldType name="string_ci" class="solr.StrField"
sortMissingLast="true" omitNorms="true">
<analyzer type="index">
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory" />
</analyzer>
<analyzer type="query">
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory" />
</analyzer>
</fieldType>
Y un ejemplo del campo de este modo:
<field name="destANYStr" type="string" indexed="true" stored="true"
multiValued="true" />
<!-- Case insensitive version -->
<field name="destANYStrCI" type="string_ci" indexed="true" stored="false"
multiValued="true" />
He intentado utilizar CopyField así:
<copyField source="destANYStr" dest="destANYStrCI" />
Pero, al parecer CopyField se llama en origen y destino antes de invocar cualquier analizador, así que aunque he especificado que dest no distingue entre mayúsculas y minúsculas a través de anaylyzers, se preserva el caso de los valores copiados del campo fuente.
Espero evitar volver a transmitir el valor en el campo del cliente, en el momento de creación del registro.
Buena respuesta. Especialmente omitNorms es útil para ahorrar memoria. –