2010-01-22 18 views
16

Tengo dos campos de tabla en una tabla MySQL. Uno es VARCHAR y es un "título" para un sitio clasificado (sitio web de anuncios clasificados). El otro es el campo TEXTO que contiene el "texto" para el clasificado.¿Cómo determinar el tipo de campo para la indexación SOLR?

dos preguntas:
¿Cómo debo determinar cómo indexar estos dos campos? (qué tipo de campo, qué clases usar, etc.)

Actualmente tengo un "ad_id" como identificador único para cada anuncio, ejemplo "bmw_m3_82398292".
¿Cómo puedo hacer que SOLR devuelva este identificador siempre que SOLR encuentre una "coincidencia de consulta"? (La primera parte del identificador es en realidad los campos del título de contenidos, la segunda parte es un número aleatorio elegido)

Gracias

Respuesta

29

1. Esquema

Su esquema de Solr está determinada en gran medida por su comportamiento de búsqueda previsto. En su archivo schema.xml, verá un montón de opciones como "texto" y "cadena". Se comportan de manera diferente.

<fieldtype name="string" class="solr.StrField" sortMissingLast="true"  omitNorms="true"/> 

El tipo de campo de cadena es una coincidencia de cadena literal. Funcionaría como == en una declaración de SQL.

<fieldtype name="text_ws" class="solr.TextField"   positionIncrementGap="100"> 
    <analyzer> 
    <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
    </analyzer> 
</fieldtype> 

El tipo de campo text_ws hace tokenización. Sin embargo, una gran diferencia en el campo text son los filtros para stop-words y los delimitadores y la carcasa inferior. Observe cómo estos filtros están designados para el índice Lucene y la consulta Solr. Por lo tanto, al buscar en un campo de texto, adaptará los términos de la consulta utilizando estos filtros para ayudar a encontrar una coincidencia.

<fieldtype name="text"  class="solr.TextField" positionIncrementGap="100"> 
    <analyzer type="index"> 
    <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/> 
    <filter ..... /> 
    <filter ..... /> 
    <filter ..... /> 
    </analyzer> 
</fieldtype> 

Al indexar cosas como las noticias, por ejemplo, es probable que quieren buscar nombres de empresas y titulares de manera diferente.

<field name="headline" type="text" /> 
<field name="coname" type="string" indexed="true" multiValued="false" omitNorms="true" /> 

El ejemplo anterior permitirá hacer una búsqueda como &coname:Intel&headline:processor+specifications y recuperar partidos que golpean exactamente historias de Intel.

Si desea buscar una gama

2. Los campos de Resultados

Puede define un conjunto estándar de campos de retorno en su RequestHandler

<requestHandler name="mumble" class="solr.DisMaxRequestHandler" > 
    <str name="fl"> 
     category,coname,headline 
    </str> 
</requestHandler> 

También puede definir el deseado campos en su cadena de consulta, utilizando el parámetro fl .:

/select?indent=on&version=2.2&q=coname%3AIn*&start=0&rows=10&fl=coname%2Cid&qt=standard 

También puede select ranges en sus términos de búsqueda utilizando la sintaxis field:[x TO *].Si desea seleccionar ciertos anuncios por su fecha, puede generar una consulta con

ad_date:[20100101 TO 20100201] 

en sus términos de búsqueda. (Hay muchas maneras de buscar rangos, estoy presentando un método que usa números enteros en lugar de la clase Fecha.)

+0

¿Sabes dónde puedo encontrar un "manual de referencia" de todas las clases y atributos para estos tipos de campo? –

+1

Normalmente comienzo en el wiki de Solr http://wiki.apache.org/solr/ y los Javadocs para las clases se encuentran aquí: http://lucene.apache.org/solr/api/index.html. –

Cuestiones relacionadas