2009-12-29 7 views
22

estoy usando motores de búsqueda Apache Solr para la indexación de mi base de datos web ..Apache Solr búsqueda de piezas de la palabra

estoy usando Django + http://haystacksearch.org/

Así que vamos a decir que tengo documento que tiene la palabra "pollo "

Cuando busco 'pollo' - Solr puede encontrar este documento

Pero cuando busco 'chick' - no encuentra nada ..

¿Hay alguna manera de arreglar esto?

Respuesta

18

Nota: La siguiente solución es Solr 1.4 (y superior) específico!

Para una mayor flexibilidad, recomendaría la indexación de sus datos con el NGramTokenizerFactory para completar las búsquedas de comodines en la parte frontal y posterior. Si solo desea buscar subcadenas al principio o al final de la cadena, considere usar el EdgeNGramTokenizerFactory.

Aquí hay una gota en el reemplazo del tipo de campo de texto que acomodar su necesidad:

<fieldType name="text" class="solr.TextField" > 
<analyzer type="index"> 
    <tokenizer class="solr.NGramTokenizerFactory" minGramSize="3" maxGramSize="15" /> 
    <filter class="solr.LowerCaseFilterFactory"/> 
</analyzer> 
<analyzer type="query"> 
    <tokenizer class="solr.WhitespaceTokenizerFactory" /> 
    <filter class="solr.LowerCaseFilterFactory"/> 
</analyzer> 
</fieldType> 
+0

solr 1.5 - es esta versión de desarrollo? (¿no se lanzó?) –

+1

¿hay una solución como esta para 1.4? –

+0

Buena captura: Corregí la respuesta para reflejar 1.4 – Brian

7

Si quieres encontrar todas las palabras que comienzan con chick, busca chick *.

+0

No puedo usar \ * chick \ *? ¿Es posible? –

+0

@soundar, Esa es una ** mala ** chica;) No puede haber * enfrente de la palabra clave de búsqueda, Lucene no es compatible. –

4

Cuando he utilizado

<tokenizer class="solr.NGramTokenizerFactory" minGramSize="3" maxGramSize="15" /> 

para hacer comodín de búsqueda de la respuesta de Brian, Solr tiempo de indexación dramaticly aumentó. ¡En más de 20 veces! La otra decisión de buscar comodín problema que encuentra aquí:

http://www.lucidimagination.com/blog/2009/09/08/auto-suggest-from-popular-queries-using-edgengrams/

Sólo se necesita agregar el filtro

<filter class="solr.EdgeNGramFilterFactory" minGramSize="1" maxGramSize="25" /> 

(tokenizer defecto - solr.WhitespaceTokenizerFactory en bloque índice de FieldType). Para mí, el resultado fue el mismo con menos costos del sistema.

0

No he cambiado ninguna configuración. Solo estoy usando star en el frente y en la parte posterior de mi searchString: * chicke * (sin espacio en blanco al final -> es debido a SO formateando la palabra como cursiva si usa * al principio y al final)

Cuestiones relacionadas