2017-01-29 1 views
0

Ich verwende Apache Solr für die Durchführung von Suchanfragen zu einigen internen Dokumenten meines Computers (gespeichert in einer Datenbank). Ich bekomme wirklich seltsame Ergebnisse für Suchanfragen, die nach absteigender Relevanz geordnet sind. Zum Beispiel habe ich 5 Wörter in meiner Suchanfrage. Das relevanteste von 4 Ergebnissen ist ein Dokument, das nur 2 dieser Wörter mehrfach enthält. Das einzige Dokument, das alle Wörter enthält, ist zuletzt tot. Wenn ich die Wörter genau richtig ändere, dann sehe ich eine bessere Reihenfolge mit dem richtigen Artikel als der relevantesten. Wie gehe ich vor, um das zu beheben? Aus meiner Sicht sollte das Dokument, das alle 5 Wörter enthält, höher eingestuft werden als ein Dokument, das nur zwei dieser Wörter enthält (häufiger angegeben).Apache Solrs bizarre Suchrelevanz-Rangliste

+0

könnten Sie die Abfrage, die Sie tun, und die Dokumente, die oben & unten sind, posten –

+0

Meine Suchanfrage lautet: "Julian Cribb EPA peak oil". Das relevanteste Dokument ist einfach eines, das Julian 2 Mal und Cribb 5 Mal erwähnt. Der Begriff "Julian Cribb" erscheint in diesem Dokument zweimal. Die zweite enthält zweimal "Cribb", einmal "Julian" und einmal "peak oil". Der dritte enthält einmal 'Julian' und einmal 'Cribb' (aber nicht zusammen, weil Cribb nicht hervorgehoben wurde). Die letzte enthält EPA 3 Mal, "peak Öl" einmal und "Julian" einmal und "Cribb" einmal. Alle 4 Titel enthalten 'Cribb'. – ron136

+0

Bitte fügen Sie die & wt = xml & debug = true in Ihre Anfrage und geben Sie Ihre Ausgabe der Ansicht Quelle in http://pastebin.com/index.php –

Antwort

1

Was Solr getan hat, ist ein korrekter Algorithmus namens TF-IDF. Also, in Ihrem Fall könnte Reihenfolge durch diese Formel erklärt werden. Eine der möglichen Lösungen besteht darin, den TF-IDF-Wert zu ignorieren und einen Treffer im Dokument als einen zu zählen, da dann einfach ein Dokument mit 5 Übereinstimmungen 5, 4 Übereinstimmungen 4 usw. erhält der Trick:

Constant-Score-Abfragen werden mit^= erstellt, die die gesamte Klausel an die angegebene Punktzahl für alle Dokumente setzt diese Klausel entsprechen. Dies ist wünschenswert, wenn Sie nur Übereinstimmungen für eine bestimmte Klausel interessieren und keine anderen Relevanzfaktoren wie wie Häufigkeit (die Anzahl der Male im Feld erscheint) oder inverse Dokumenthäufigkeit (ein Maß über das Ganze) Index für wie selten ein Begriff in einem Feld ist).

Mögliche Beispiel für die Abfrage:

text:Julian^=1 text:Cribb^=1 text:EPA^=1 text:peak^=1 text:oil^=1 

Eine andere Lösung, die eine gewisse Scripting erforderlich ist, werden in etwa so sein, zuerst eine Abfrage benötigen, wo Sie alles genau 5 Elemente fragen enthält, z.B +Julian +Cribb +EPA +peak +oil, dann werden Sie das gleiche für die Kombination von 4 Elementen von 5 tun, wenn ich mich nicht irre, wird es zusätzliche 5 Abfragen erfordern und zurück, bis Sie alles bis 1 obligatorische Klausel überprüfen. Dann haben Sie volle Ergebnisse, und Sie müssen nur normalise Ergebnisse oder nur verketten, wenn Sie entschieden, dass 5-matched Docs immer besser als 4-matched Docs. Nachteile dieser Lösung - eine Menge von Abfragen, müssen sie programmgesteuert ausführen, einige Skript würde helfen, Normalisierung ist nicht offensichtlich. Pros - Sie behalten sowohl TF-IDF als auch die Idee der passenden Begriffe.

+0

Danke, aber ich bin auf der Suche nach etwas, das sowohl Häufigkeit als auch wie viele der angegebenen Suchbegriffe in den Ergebnissen berücksichtigt werden würde. Ich möchte nur Dokumenten, die mehr Suchbegriffe enthalten, wesentlich mehr Gewicht verleihen als Dokumenten, die weniger Begriffe enthalten (viele Male mehr). Ich werde deine Methode ausprobieren. Vielen Dank. – ron136

+0

wird es fast unmöglich sein, zumindest ohne die zusätzliche Programmierung. – Mysterion

+1

dies ist möglicherweise nicht korrekt ... wenn er Solr 6 oder später verwendet, ist die Standard-Scoring-Methode BM25, nicht TD-IDF – Persimmonium

Verwandte Themen