2011-10-08 12 views
7

Estoy tratando de buscar una palabra parcial usando Solr, pero no puedo conseguir que funcione.buscar palabras parciales utilizando Solr

estoy usando esto en mi archivo schema.xml.

<fieldType name="text" class="solr.TextField" omitNorms="false"> 
    <analyzer type="index"> 
     <tokenizer class="solr.NGramTokenizerFactory" minGramSize="3" maxGramSize="15" /> 
     <filter class="solr.LowerCaseFilterFactory"/> 
    </analyzer> 
    <analyzer type="query"> 
     <tokenizer class="solr.StandardTokenizerFactory"/> 
     <filter class="solr.StandardFilterFactory"/> 
     <filter class="solr.LowerCaseFilterFactory"/> 
     <filter class="solr.PorterStemFilterFactory"/> 
     <filter class="solr.WordDelimiterFilterFactory" stemEnglishPossessive="1" splitOnNumerics="1" splitOnCaseChange="1" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="1" preserveOriginal="1"/> 
    </analyzer> 
</fieldType> 

Buscando die h no va a funcionar, pero die hard devuelve algunos resultados. He reindexado la base de datos después de que se agregó la configuración anterior.

Here es la url y la salida al buscar die hard. El depurador está encendido.

Here es la url y la salida al buscar die h. El depurador está encendido.

estoy usando Solr 3.3. Here es el resto del archivo schema.xml.

+0

Resolvé esto. vaya a: http://stackoverflow.com/questions/4824954/solr-partial-and-full-string-match/8247013#8247013 – wormhit

Respuesta

6

La consulta que has compartido está buscando en el campo "Title_Text", pero el esquema que envió por encima define el campo "texto". Asumiendo que esto era simplemente un descuido, y el campo Title_Text se define como en su puesto, creo que un tema probable es que el NGramTokenizer está configurado con minGramSize = "3", y que están esperando para que coincida con un token de un solo carácter.

Usted podría intentar cambiar minGramSize a 1, pero esto conducirá inevitablemente a unos índices muy ineficientes; y me pregunto si realmente estás interesado en que "e" coincida con todas las películas con una e en el título.

+0

¿Es posible definir un 'NGramTokenizerFactory' para todos los índices, no solo para' texto'? Intenté buscar la película "The Dancing Masters" usando 'Danci', que funcionó. Pero no funcionó para buscar 'Danc', alguna idea de por qué? ¿No debería el límite 'NGramTokenizerFactory' establecerse en 3? – Oleander

+0

El análisis (tokenizadores, etc.) se define por campo en Solr. Si desea indexar todo el texto en todos sus campos a la vez, puede definir un campo de copia que lo haga automáticamente. Sospecho que el partido "Danci" se debe a la tokenización y no a NGram. Si te metes en la herramienta de administración donde puedes ver los resultados del análisis, deberías poder decirlo. –

+0

El uso de copyField funcionó muy bien. [Aquí] (https://gist.github.com/1272526) es el resultado. ¿Conoces por casualidad algún otro filtro de dios que pueda incluir en mi archivo schema.xml? – Oleander

Cuestiones relacionadas