2010-12-07 1 views
6

Ich suche "Produktdokumente". Mit anderen Worten, meine solr-Dokumente sind Produktdatensätze. Ich möchte sagen, die Top 50 passenden Produkte für eine Abfrage. Dann möchte ich in der Lage sein, die 50 wichtigsten Scoring-Dokumente nach Name oder Preis zu sortieren. Ich sehe nicht viel darüber, wie das zu tun ist, da Sortieren nach Score, dann nach Name oder Preis nicht wirklich helfen wird, da Scores Floats sind.Wie kann ich nach Punktzahl vor dem Sortieren in einer Solr-Abfrage

Ich hätte nichts dagegen, wenn ich etwas tun könnte wie die Punkte auf Bereiche (wie ein Ergebnis von 8.0-8.99 würde in den 8 Eimer Punktzahl gehen), dann sortieren nach Bereich, dann nach Namen, aber da ist es im Grunde keine Normalisierung zum Scoring, dies würde die Dinge noch etwas schwieriger machen.

Tl; dr Wie schließe ich Dokumente mit niedrigem Scoring vor dem Sortieren aus dem Solr-Ergebnissatz aus?

Antwort

3

Sie frange dies zu erreichen, verwenden können, solange Sie in der Partitur sortieren wollen nicht (in diesem Fall ich Sie erraten könnte nur die Filterung auf der Client-Seite tun).

Ihre Anfrage würde etwas entlang der Linien der folgenden sein:

q={!frange l=5}query($qq)&qq=[awesome product]&sort=price asc 

die l-Argument in der q-frange-Parameter an den unteren Stellen gebunden Sie Punktzahl auf gefiltert werden soll, und die qq Parameter ersetzen mit Ihrem Benutzerabfrage

+0

danke, da kann ich eine vernünftige frange von der ersten zeit die ergebnisse angezeigt sortiert nach punkten allein, das funktioniert super! – Zak

0

ich Sie glaube nicht einfach

niedrigen Scoring-Dokumente aus den solr Ergebnismenge ausschließen, bevor

weil die Relevanz sortiert nur sinnvoll ist, für eine gegebene Kombination von Suchkriterien Sortier und resultierende Dokumentenliste. I.e. Scores sind nur innerhalb einer bestimmten Suche sinnvoll und Sie können keinen Schwellenwert für alle Suchvorgänge festlegen.

Wenn Sie Java (oder PHP) verwenden, können Sie die Top 50 Dokumente erhalten und diese Liste in Ihrer Programmiersprache neu sortieren, aber ich denke nicht, dass Sie es nur mit SOLR machen können.

Wie auch immer, ich würde empfehlen, dass Sie diesen Weg der Neuordnung der Ergebnisse von SOLR nicht gehen, da es den Benutzer einfach verwirrt. Die Leute erwarten, dass die Suchergebnisse wie Google (und die meisten anderen Suchmaschinen) sein werden, wo die Ergebnisse in irgendeiner Form vom TFIDF-Ranking zurückkommen.

Mit diesem Argument könnten Sie einige andere Kriterien verwenden, um Dokumente mit denselben Relevanzwerten zu trennen, indem Sie einen Faktor index-time boost basierend auf einer Preisbereichsskala hinzufügen.

Ich würde vorschlagen, dass Sie SOLR zu seinen Stärken verwenden und Facetten verwenden. Geben Sie eine Facette für die Preisspanne auf der linken Seite (wie Ebay, Amazon usw.) und/oder eine Facette für die Produktkategorie usw. ein. Geben Sie auch ein "Sortier" -Widget an, damit die Ergebnisse nach Produktnamen sortiert werden können, wenn der Benutzer dies wünscht es.

[EDIT] Diese Frage könnte auch nützlich sein:

Digg-like search result ranking with Lucene/Solr?

0

Wie von Karl Johansson beobachtet, können Sie die Filterung auf der Client-Seite tun: Laden Sie die ersten 50 Zeilen der Antwort (sortiert nach Score desc) und manipulieren Sie sie dann in JS zum Beispiel.Die jQuery DataTables plugin funktioniert fantastisch für solche Dinge: Sortieren, Sortieren auf mehrere Spalten, dynamische Filterung usw. - und mit nur 50 Zeilen wäre es auch sehr schnell, so dass Benutzer mit der Sortierung "spielen" können und filtern, bis sie das finden, was sie wollen.

Verwandte Themen