2010-03-11 20 views
13

Ich war im Internet auf der Suche nach einer Indexierung und Suche Rahmen und stolperte über Solr. Eine Funktionalität, die wir unbedingt brauchen, ist die Steigerung der Ergebnisse basierend auf dem Feld, in dem der Treffer enthalten ist.Boost Solr Ergebnisse basierend auf dem Feld, das den Treffer enthielt

Ein kleines Beispiel:

Betrachten wir einen Datensatz wie folgt aus:

<movie> 
    <title>The Dark Knight</title> 
    <alternative_title>Batman Begins 2</alternative_title> 
    <year>2008</year> 
    <director>Christopher Nolan</director> 
    <plot>Batman, Gordon and Harvey Dent are forced to deal with the chaos unleashed by an anarchist mastermind known only as the Joker, as it drives each of them to their limits.</plot> 
</movie> 

ich zum Beispiel kombinieren wollen den Titel, alternative_title und Handlungsfelder in ein Suchfeld, das nicht allzu schwierig ist nach Schauen Sie sich die Solr/Lucene Dokumentation und Tutorials an. Allerdings möchte ich auch, dass Filme, die einen Titeltreffer haben, eine höhere Punktzahl haben als Treffer auf alternative_title, und diese wiederum sollten höher punkten als Treffer im Plotfeld. Gibt es eine Möglichkeit, diese Art von Scoring in der XML anzugeben oder müssen wir einen benutzerdefinierten Scoring-Algorithmus entwickeln?

Bitte beachten Sie auch, dass das Beispiel, das ich angegeben habe, fiktiv ist und die echten Daten wahrscheinlich mehr als 100 Felder enthalten werden.

Vielen Dank im Voraus,

Tom

Antwort

6

Ich habe Solr nicht verwendet, aber ich habe Lucene verwendet. Bei der Betrachtung:

http://wiki.apache.org/solr/SolrQuerySyntax

Es besagt, dass Solr die Abfragesyntax ein Superset von Lucene ist ist. Und in Lucene, die Art und Weise können Sie Boosts pro-Feld durchführen ist die Karotte Operator durch einen willkürlichen Wert, gefolgt zu verwenden, dh

title:batman^10 alternative_title:batman

Der Vorteil dabei bei Abfrage-Zeit ist, dass Sie die zwicken Steigern Sie den Wert im laufenden Betrieb, um dem von Ihnen gewünschten Standard zu entsprechen. Wenn also ein Boost-Wert von 10 zu hoch ist, können Sie ihn entsprechend anpassen.

11

Das ist der DismaxQueryParser von Solr. Siehe http://wiki.apache.org/solr/DisMaxRequestHandler

Es gibt viele Parameter, aber die wichtigste, die Sie anpassen müssen, ist "qf", und Sie geben an, welche Felder durchsucht werden sollen und wie hoch der jeweilige Boost ist. Also, wenn Sie Titel dominieren wollen, könnten Sie so etwas wie angeben:

Titel^10 alternative_title^2 Direktor^1 Grundstück^1

als der Wert der QF-Parameter. Sie können dies einrichten, indem Sie die Beispielkonfiguration anpassen und von dort experimentieren.