2010-03-21 28 views
9

Tengo un índice de Lucene que actualmente distingue entre mayúsculas y minúsculas. Deseo agregar la opción de tener una búsqueda insensible a mayúsculas/minúsculas como una recuperación. Esto significa que los resultados que coincidan con el caso tendrán más peso y aparecerán primero. Por ejemplo, si el número de resultados está limitado a 10, y hay 10 coincidencias que coinciden con mi caso, esto es suficiente. Si solo encuentro 7 resultados, puedo agregar 3 resultados más de la búsqueda de mayúsculas y minúsculas.Lucene, búsqueda sensible a mayúsculas y minúsculas

Mi caso es en realidad más complejo, ya que tengo artículos con diferentes pesos. Idealmente, tener una coincidencia con el caso "incorrecto" agregará algo de peso. No hace falta decir que no quiero resultados duplicados.

Un posible enfoque es tener 2 índices. Uno con mayúscula y otro sin y busca ambos. Naturalmente, hay algo de redundancia aquí, ya que necesito indexar dos veces.

¿Existe una solución mejor? Ideas?

+0

¿has probado copyField? ver http://wiki.apache.org/solr/SchemaXml – Karussell

Respuesta

6

¿Has probado copyField? ver http://wiki.apache.org/solr/SchemaXml#Copy_Fields

Si no define un nuevo campo B con una configuración diferente y copiar campo de A en B a través de copyField

+3

Bueno, copyField es una función de Solr y estoy usando un barebone de Lucene. Sin embargo, puedo agregar un campo adicional con el mismo texto indexado, en minúsculas. Esto es mucho mejor que crear un índice completamente separado, entonces +1. – zvikico

+0

ups, ok. Tenía exactamente el mismo problema, pero estaba trabajando con solr. Sin embargo, agregué esta respuesta demasiado rápido. – Karussell

+0

Ya estoy funcionando con el campo extra, por lo que su respuesta me dio un empujón en la dirección correcta. Eso es todo lo que necesitaba. Gracias de nuevo. Lo mantendré abierto para ver si puedo obtener soluciones más eficientes. – zvikico

5

La búsqueda Lucene mayúsculas y minúsculas, es sólo que toda la entrada es por lo general con carcasa inferior al pasar por Queryparser, por lo que parece que es insensible. En otras palabras, No minúscula su entrada antes de indexación, y no minúscula sus consultas (es decir, escoger un analizador que no minúscula) palabra-analizador de por ejemplo.

[setLowercaseExpandedTerms][1](boolean lowercaseExpandedTerms) 

puede índice de los términos que usan caja del analizador sensible y cuando quieres consulta entre mayúsculas y minúsculas utilizar una clase que doesnot convertir sus términos en minúsculas

vistazo a Comodín, Prefijo y consultas difusas

+0

Naturalmente, el uso de un analizador de mayúsculas y minúsculas con una consulta de menor cuidado no arrojará los resultados correctos. – zvikico

+0

¿Puedes hacer lo mismo con sqlite o mysql? – Naveen

+1

@Naveen: sqlite y mysql tienen un motor de base de datos fullblown, ¿cuál es su pregunta? – Narayan

Cuestiones relacionadas