2016-08-08 5 views
2

Szenario ist Dokumente auf mehreren Feldwerte zu steigern:Solr Relevanz & Steigerung der beste Ansatz

Ich habe ein Feld "Category" enthält Werte - "News", "image", "video", "audio".

nun auf der Grundlage der Felder Werte oben genannt ich eine Steigerung (Priorität), um sie möchte, zum Beispiel zu sagen geben „News“ erhält höchste Priorität, gefolgt von „video“, als „audio“ und so weiter.

Ähnlich wie in der Kategorie gibt es einige weitere Felder, die auf der Grundlage von Feldwerten auf dieselbe Weise verstärkt werden müssen.

Ex. Steigerung der Regeln kann sein

Category= News^1000 
Category= Image^900 
Premium_Contents = True^200 
Sponsored = True^300 

... so auf

So habe ich stieß auf eine Lösung Reference. Ich versuche, den besten Ansatz für die Berechnung meiner Suchergebnisse zu finden.

Antwort

3

Ja, ich denke, Ihre Verbindung ist eine vernünftige Idee. Es ist das, was wir verwenden, weil wir erzwingen möchten Boosts auf alle Suchanfragen sind und wir nicht sehr oft die Logik ändern, zum Beispiel in Ihrem Fall: -

<requestHandler name="/select" class="solr.SearchHandler"> 
    <lst name="defaults"> 
     <str name="defType">edismax</str> 
     <str name="boost">product(
        map(query($type1query),0,0,1,$type1boost), 
        map(query($type2query),0,0,1,$type2boost))</str> 
      <str name="type1query">Category:"News"</str> 
      <double name="type1boost">1000.0</double> 
      <str name="type2query">Category:"Image"</str> 
      <double name="type2boost">900.0</double> 
    </lst> 
</requestHandler> 

In diesem Fall wird die Abfrage-Funktion gibt die Punktzahl die spezifische Abfrage Das sucht nach Übereinstimmung für Nachrichten, Bild usw. in der Kategorie.

Die Kartenfunktion hat die folgende Signatur: map (x, min, max, target, value) bildet alle Werte der Funktion x ab, die innerhalb von min und max inklusive Ziel liegen. min, max, target, value sind Konstanten. Er gibt den Feldwert (oder "Wert") aus, wenn er nicht zwischen Min und Max liegt. Mit anderen Worten, wenn das Ergebnis der Abfrage ein positiver Wert ist (es gibt eine Übereinstimmung), wird die Erhöhung (1000, 900 usw.) ausgegeben. Sie müssen mit den Boost-Werten spielen, da sie jede andere Ranglistenlogik, die Sie haben, überfordern können. Sie können schlechte Nachrichten auf der ersten Rangliste bekommen, wenn es eine bessere Übereinstimmung auf Video gibt.

Sie könnten mit diesen Boosts einen separaten Anforderungshandler erstellen, damit Sie sie für andere Suchen umgehen können. Offensichtlich müssen Sie solrconfig ändern und Solr neu starten, wenn Sie Änderungen vornehmen, was ein Problem sein kann.

Ansonsten sehen Sie sich den Parameter bq (Boost-Abfrage) an.

bq=Category:News^1000.0+Category:Image^900... 

, die tatsächlich so etwas wie dies unter der Decke

boost(+*:* (Category:News^1000 + Category:Image^900)) 

Dies erzeugt bedeutet, dass die Schübe bei der Suche Code fertig sind, die schön und flexibel ist. Persönlich bevorzuge ich diese Art zu arbeiten.

Verwandte Themen