2009-12-29 9 views
8

Ich habe ein Problem mit Solr und Facetting und frage mich, ob jemand von der Lösung weiß. Ich habe eine Arbeit dafür in der Minute, aber ich möchte wirklich herausfinden, warum meine Abfrage nicht funktioniert.Faceting mit Solr mit "String" -Feldern, "Text" -Feldern und "Kopieren" -Felder

Hier ist mein Schema, vereinfacht, um es einfacher zu folgen:

<fields> 
    <field name="uniqueid" type="string" indexed="true" required="true"/> 
    <!-- Indexed and Stored Field ---> 
    <field name="recordtype" type="text" indexed="true" stored="true"/> 
    <!-- Facet Version of fields --> 
    <field name="frecordtype" type="string" indexed="true" stored="false"/> 
</fields> 

<!-- Copy fields for facet searches --> 
<copyField source="recordtype" dest="frecordtype"/> 

Wie man sehen kann ich ein Groß- und Kleinschreibung Feld namens Record haben und es zu einem Fall sensiblen Bereich frecordtype kopiert wird, die nicht die nicht tokenize Text. Dies liegt daran, dass solr den indizierten Wert und nicht den gespeicherten Wert in den Facette-Ergebnissen zurückgibt.

Wenn ich versuche, die folgende Abfrage:

http://localhost:8080 
/solr 
/select 
?version=2.2 
&facet.field=%7b!ex%3dfrecordtype%7dfrecordtype 
&facet=on 
&fq=%7b!tag%3dfrecordtype%7dfrecordtype%3aLarge%20Record 
&f1=*%2cscore 
&rows=20 
&start=0 
&qt=standard 
&q=text%3a%25 

Ich erhalte keine Ergebnisse, aber der facteting noch zeigt, dass es 1 Platte.

<result name="response" numFound="0" start="0" /> 
<lst name="facet_counts"> 
    <lst name="facet_queries" /> 
<lst name="facet_fields"> 
<lst name="frecordtype"> 
    <int name="Large Record">1</int> 
    <int name="Small Record">12</int> 
    <int name="Other">1</int> 
    </lst> 
    </lst> 
    <lst name="facet_dates" /> 
    </lst> 

Allerdings, wenn ich die fitler Abfrage (Linie 7 nur) auf dem "Record" zu ändern insted frecordtype:

http://localhost:8080 
/solr 
/select 
?version=2.2 
&facet.field=%7b!ex%3dfrecordtype%7dfrecordtype 
&facet=on 
&fq=%7b!tag%3dfrecordtype%7drecordtype%3aLarge%20Record 
&f1=*%2cscore 
&rows=20 
&start=0 
&qt=standard 
&q=text%3a%25 

Ich bekomme das 1 Ergebnis zurück, dass ich will.

<result name="response" numFound="1" start="0" /> 
<lst name="facet_counts"> 
    <lst name="facet_queries" /> 
<lst name="facet_fields"> 
<lst name="frecordtype"> 
    <int name="Large Record">1</int> 
    <int name="Small Record">12</int> 
    <int name="Other">1</int> 
    </lst> 
    </lst> 
    <lst name="facet_dates" /> 
    </lst> 

Also meine Frage ist, gibt es etwas, was ich zu tun, um brauchen die erste Version der Abfrage zu erhalten, die Ergebnisse zurück ich will? Vielleicht hat es etwas mit URL-Codierung oder etwas zu tun? Irgendwelche Hinweise von irgendwelchen Gurus oder anderen wären sehr dankbar.

HINWEIS: Dies ist keine Facettierungsfrage, da die Facettierung tatsächlich funktioniert. Es handelt sich eher um eine Abfragefrage, da ich keine Abfrage für ein "string" -Feld ausführen kann, obwohl die Groß-/Kleinschreibung und der Abstand genau der indexierten Version entsprechen.

EDIT: Für weitere Informationen über Facettierung Sie darauf, diese Blog-Post überprüfen können:

Dank

Dave

+0

Arrhhh Sorted this out ... Sie benötigen Anführungszeichen um Werte mit Leerzeichen :) – CraftyFella

Antwort

10

Sie benötigen zitiert um die Werte

z.

frecordtype: "Large Record"

arbeitet

frecordtype: Großer Rekord

Diese für Groß im frecordtype suchen, die nichts bringen wird zurück .. dann Bilanz über das Standardfeld in solr.

Verwandte Themen