2012-10-11 85 views
16

schema.xml fragmento:Solr - consultas sobre todos los campos de las mejores prácticas

<field name="id" type="string" indexed="true" stored="true" required="true" /> 
    <field name="notes" type="text_general" indexed="true" stored="true"/> 
    <field name="missionFocus" type="text_general" indexed="true" stored="true"/> 
    <field name="name" type="text_general" indexed="true" stored="true"/> 
    <field name="first_name" type="text_general" indexed="true" stored="true"/> 
    <field name="last_name" type="text_general" indexed="true" stored="true"/> 
    <field name="about_me" type="text_general" indexed="true" stored="true"/> 
    <field name="message" type="text_general" indexed="true" stored="true"/> 
    <field name="title" type="text_general" indexed="true" stored="true"/> 
    <field name="table_type" type="string" indexed="true" stored="true"/> 

    <field name="text" type="text_general" indexed="true" stored="false" 
      multiValued="true"/> 

Ahora quiero buscar en todos los campos (excepto "ID" y "table_type") para, por ejemplo, "Hola". ¿Como puedo hacer esto? ¿Realmente tengo que escribir lo siguiente?

/solr/select/?q=notes:hello missionFocus:hello name:hello first_name:hello .. 

he oído algo acerca de cómo DisMaxRequestHandler pero tengo que consultar con este controlador? ¿Debo cambiar algo en solrconfig.xml por eso?

Respuesta

21

La mejor solución es la construcción de un campo, que recoge los datos de todos los campos como éste

<field 
    name="collector" 
    type="text_general" 
    indexed="true" 
    stored="false" 
    multiValued="true" 
/> 

Lo único que tiene que hacer ahora es, copiar el contenido de todos los campos en ese campo:

<copyField source="notes"  dest="collector"/> 
<copyField source="missionFocus" dest="collector"/> 
<copyField source="name"   dest="collector"/> 
.... 

tenga en cuenta que el bloque copyField tiene que ser definido ABAJO esto:

<fields> 
.... 
</fields> 

Ahora puede buscar solo en el campo collector y encontrará cualquier texto en cualquiera de sus campos.

+0

Creo que ya definí un campo "colector" llamado "texto"? :) Bueno, acabo de copiarlo del ejemplo schema.xml. – user1731299

+0

Correcto: "texto" es el campo equivalente en el proyecto de ejemplo solr ;-) – heinob

+0

¿qué hacer si quiero ajustar la puntuación según el campo que coincida? – faridasabry

Cuestiones relacionadas