2012-10-11 8 views
16

schema.xml Snippet:Solr - Abfrage über alle Felder best practice

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

nun in allen Bereichen suchen, ich will (mit Ausnahme von "id" und "table_type") für z.B. "Hallo". Wie kann ich das machen? Muss ich wirklich folgendes schreiben?

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

Ich habe etwas über DisMaxRequestHandler gehört, aber wie muss ich mit diesem Handler abfragen? Muss ich etwas in solrconfig.xml dafür ändern?

Antwort

21

Die beste Lösung ist es, ein Feld zu bauen, die die Daten aller Felder wie diese

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

Das einzige, was Sie jetzt tun müssen, ist, kopieren Sie den Inhalt aller Felder in diesem Bereich sammelt:

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

beachten Sie, dass der copyField Block definiert werden BELOW dieses:

<fields> 
.... 
</fields> 

Jetzt können Sie nur auf dem Feld collector suchen und Sie finden einen beliebigen Text in einem Ihrer Felder.

+0

Ich glaube, ich habe bereits ein "Sammler" -Feld namens "Text" definiert? :) Nun, ich habe es einfach aus dem Beispiel schema.xml kopiert. – user1731299

+0

Das ist richtig: "Text" ist das äquivalente Feld im Solr-Beispielprojekt ;-) – heinob

+0

Was kann ich tun, wenn ich das Scoring basierend auf den Feldtreffern optimieren möchte? – faridasabry