Bei einem mehrwertigen Ganzzahlfeld, in dem Sie die Dokumente basierend auf der Anzahl der Übereinstimmungen ranken möchten, wenden Sie eine Anhebungsabfrage für jede Übereinstimmung an. Wenn Sie zum Beispiel eine Reihe von Monitoren in verschiedenen Größen haben, können Sie für jede gültige Größe einen Boost anwenden (ich habe das zusammengehackt und es mit den Beispieldokumenten aus dem Tech-Core getestet, das ist also mein Beispiel und ich Ich bleibe dabei. Ich habe zwei relevante Dokumente, eines mit dem Namen VA902B
mit sizes
als ein mehrwertiges Feld mit den Werten 23, 28 und 32, und eines mit dem Namen 3007WFP
mit den Werten 23, 29, 36 im selben Feld.
Hier frage ich für jedes Dokument, aber geben Sie mir diejenigen, die sowohl Größe 28 und Größe haben 23 an der Spitze, und dann diejenigen, die entweder eine Größe von 28 oder Größe haben 23, und dann jedes andere Dokument:
?bq=sizes:28&bq=sizes:23&defType=edismax&q=*:*
Wenn ich den Satz von Dokumenten auf diejenigen beschränken möchten, die eine der beiden Größen übereinstimmen, kann ich das als meine Hauptabfrage:
?defType=edismax&q=sizes:(23%2028)
.. und das ist, wo ich, dass Ihre Vermutung entdecken dass die Punktzahl unabhängig von der Anzahl der Übereinstimmungen gleich ist, ist falsch. Hinzufügen &debugQuery=true
an die URL gibt uns detaillierte Scoring-Informationen für jedes Dokument:
"explain": {
"VA902B": "\n2.0 = sum of:\n 1.0 = sizes:[23 TO 23]\n 1.0 = sizes:[28 TO 28]\n",
"3007WFP": "\n1.0 = sum of:\n 1.0 = sizes:[23 TO 23]\n"
},
.. was bedeutet, dass es keine Notwendigkeit, einen Schub für die Anwendung - das Verhalten, das Sie wollen, ist das Standard Verhalten für Solr. Das war mein erster Gedanke, aber das hätte dir die richtige Antwort mit den Fragen gegeben, die du in den Kommentaren gegeben hast.
Aber ich werde Sie zeigen, wie meine Strategie steigert mit der Anwendung als auch hätten gearbeitet:
?bq=sizes:28&bq=sizes:23&defType=edismax&q=sizes:(23%2028)&debugQuery=true
.. was sagt uns jetzt, dass die Punktzahl für jedes Dokument effektiv verdoppelt hat, da es 1,0 erzielt wird (aus der Abfrage) + 1,0 (aus dem Boost) für jedes Spiel.
"explain": {
"VA902B": "\n4.0 = sum of:\n 2.0 = sum of:\n 1.0 = sizes:[23 TO 23]\n 1.0 = sizes:[28 TO 28]\n 1.0 = sizes:[28 TO 28]\n 1.0 = sizes:[23 TO 23]\n",
"3007WFP": "\n2.0 = sum of:\n 1.0 = sum of:\n 1.0 = sizes:[23 TO 23]\n 1.0 = sizes:[23 TO 23]\n"
},
Getestet habe ich auch die q=sizes(23 28)
Abfrage mit dem Standard lucene Abfrageparser (und nicht dismax/edismax die bq
unterstützen), und das Verhalten war das gleiche.
Wie sieht Ihre Anfrage aus? – MatsLindh
Tatsächliche ist auf Rollennummern, aber das ist, wie es in dem gegebenen Beispiel wäre - 'curl http: // localhost: 8983/solr/XYZ/Abfrage-d '{" Abfrage ":" Einschreibung: Amit Manish Navin "," sort ":" score desc "} ' – Manish
Das ist wirklich wichtig, da der Score nicht für ganze Zahlen berechnet wird; Wenn Sie ein Token-Textfeld wie in Ihrer Frage haben, sind die Score-Berechnungen unterschiedlich. Es gibt auch keinen'Abfrage'-Parameter, der an Solr gegeben wird (die reguläre Abfrage wird durch 'q' gegeben). Wenn Sie eine Frage stellen, ist es wichtig, dass die Frage die gleiche ist wie das, was Sie zu lösen versuchen. Sie können Ihr tatsächliches Problem wahrscheinlich lösen, indem Sie für jeden Wert, den Sie suchen, Boost-Abfragen geben (also 'bq = Feld: Wert & bq = Feld: Wert2'). – MatsLindh