2012-10-11 13 views
16

schema.xml frammento:Solr - Query su tutti i campi migliori pratiche

<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"/> 

Ora voglio cercare in tutti i campi (ad eccezione di "id" e "TABLE_TYPE") per esempio "Ciao". Come posso farlo? Devo davvero scrivere dopo?

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

Ho sentito qualcosa su DisMaxRequestHandler ma come devo interrogare con questo gestore? Devo cambiare qualcosa in solrconfig.xml per quello?

risposta

21

La soluzione migliore è quella di costruire un campo, che raccoglie i dati di tutti i campi come questo

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

L'unica cosa che dovete fare ora è, copiare il contenuto di tutti i campi in quel campo:

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

essere consapevoli del fatto che il blocco copyField deve essere definito SOTTO questo:

<fields> 
.... 
</fields> 

Ora è possibile cercare solo sul campo collector e troverete qualsiasi testo in uno qualsiasi dei vostri campi.

+0

Penso di aver già definito un campo "raccoglitore" di nome "testo"? :) Beh, l'ho appena copiato dallo schema schema.xml. – user1731299

+0

Proprio così: "testo" è il campo equivalente nel progetto di esempio solr ;-) – heinob

+0

cosa fare se voglio modificare il punteggio in base a quale campo corrisponde? – faridasabry