2011-11-23 17 views
15

Tengo un problema en SOLR Search.
que tienen datos de esta manera:
enter image description hereSOLR Búsqueda insensible a mayúsculas/minúsculas

utilizo Solr de administración para encontrar estos datos mediante consulta como esta:

address_s:*Nadi* 

y encontró esos datos. Pero cuando uso esta consulta:

address_s:*nadi* 

no encuentra nada.
he buscando en Google y me encontré con una respuesta para crear un campo con el siguiente script:

<fieldType name="c_text" class="solr.TextField"> 
    <analyzer type="index"> 
     <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
     <filter class="solr.LowerCaseFilterFactory"/> 
    </analyzer> 

    <analyzer type="query"> 
     <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
     <filter class="solr.LowerCaseFilterFactory"/> 
    </analyzer> 
</fieldType> 

he copiar y pegar los script en schema.xml, pero todavía no funciona. ¿Que debería hacer? ¿Alguien puede ayudarme?

Respuesta

11

El campo address_s deberían definirse como -

<field name="address_s" type="c_text" indexed="true" stored="true"/> 

Si está utilizando el schema.xml predeterminada, esta defination debe venir antes -

<dynamicField name="*_s" type="string" indexed="true" stored="true"/> 

que lo define como un tipo de campo de cadena sin análisis realizado.

Las consultas de comodín no se analizan.
Por lo tanto, si aplica un filtro de minúsculas en el índice, la consulta address_s:*nadi* funcionaría.
Sin embargo, la consulta address_s:*Nadi * no, como Nadi no coincidirá con nadi en el índice y usted necesitaría minúsculas las consultas en el lado del cliente.

+1

He seguido tus instrucciones, pero todavía no puede funcionar. Copio pegar '' a schema.xml, y volver a ejecutar 'java -jar start.jar' y probé la consulta . Lo siento, quiero preguntar primero, utilicé schema.xml en ... \ solr_302 \ example \ solr \ conf, ¿es así,? – Praditha

+0

hey es trabajo, necesito volver a insertar el documento primero. Gracias,. ¿sabes cómo definir esos campos a través de PHP,.? así que no necesito definirlo en schema.xml manualmente. – Praditha

+5

'Sin embargo, consulta address_s: * Nadi * no, ya que Nadi no coincidirá con nadi en index' - ¿Pero no es ese el punto de tener' LowerCaseFilterFactory' en '', entonces que * las consultas * están en minúsculas automáticamente? – Madbreaks

5

¿Su campo address_s usa este tipo de campo c_text en su schema.xml?

Si su índice se ha creado con la configuración anterior, necesita volver a indexar todo para tener en cuenta los cambios.

+0

Cómo hacer eso,.? porque hago todos los campos usando php. Ingreso todos los campos en una matriz como esta: $ data = array (..., 'address_s' => 'value', 'city_name_s' => 'value', ...); y use la función addDocument ($ data). Alguna idea.,? – Praditha

+3

Luego necesita volver a ejecutar estos comandos para todos los documentos que se han agregado al índice. La representación de los datos en el índice depende del analizador que se haya utilizado. Por lo tanto, si actualiza el analizador que usa para indexar, necesita volver a indexar todos sus documentos. – jpountz

+0

lo siento, todavía no entiendo qué debería hacer, puede describirlo paso a paso: D y cuando debería usar el campo 'c_text' escribir en todo el índice, cuando vuelva a ejecutar mi comando php,.? – Praditha

5

He utilizado este tipo de campo como:

<fieldType name="string" class="solr.TextField"> 
    <analyzer type="index"> 
    <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    </analyzer> 
    <analyzer type="query"> 
    <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    </analyzer> 
</fieldType> 

y definido mis campos usando:

<field name="address" type="string" indexed="true" stored="true"/> 

El resultado: Mi documento devuelve los campos en el caso de la derecha (como insertado) y puedo buscar mayúsculas y minúsculas (usando letras mayúsculas y minúsculas) ...

Versión: Solr 3.6

+0

esto le dará un error –

1

He usado algo como esto ... En esquema.xml He puesto un nuevo FieldType

<fieldType name="newType" class="solr.TextField" positionIncrementGap="100"> 
     <analyzer type="index"> 
     <tokenizer class="solr.KeywordTokenizerFactory"/> 
     <filter class="solr.LowerCaseFilterFactory"/> 
     <filter class="solr.ReversedWildcardFilterFactory" /> 
     </analyzer> 
     <analyzer type="query"> 
     <tokenizer class="solr.KeywordTokenizerFactory"/> 
     <filter class="solr.LowerCaseFilterFactory"/> 
     <filter class="solr.ReversedWildcardFilterFactory" /> 
     </analyzer> 
</fieldType> 

Asignar el nuevo tipo de campo que desea que sea el caso & espacios en blanco insensibles Entonces usted tiene que construir la consulta Solr en la forma: fieldName:(*fieldValue\ *)

1

en lugar de type="string" defina el campo type="text_general" (como se define en el esquema predeterminado.xml). En eof su propiedad es ignore case=true

-2

¿Cómo se hace insensible a mayúsculas/minúsculas una colección que utiliza un esquema dinámico (o esquema controlado por datos)? Colección fue creada como: su - solr -c "/opt/solr/bin/solr create -c Mock2 -n data_driven_schema_configs"

Cuestiones relacionadas