SQL WIE, wie man Ergebnisse durch gewichtete Vorkommenzählung bestellt?

8

Das Problem

Ich habe meinen Suchbegriff:

%Vor%

Ich teile die Begriffe in drei Wörter auf:

%Vor%

Ich suche dann mit:

%Vor%

Wie kann ich die Ergebnisse mit diesen Verzerrungen bestellen?

  • Titel übernimmt die Präsidentschaft, wenn einer der Begriffe im Titel erscheint, sollten sie als wichtiger angesehen werden
  • Vorkommenszahlen, Ergebnisse mit höheren Gesamtvorkommen sollten zuerst erscheinen

Ideale Methodeoloy

  • Zählen Sie die Vorkommen in description .
  • Jedes Vorkommen hier ist wert 1 point .
  • Zählen Sie die Vorkommen in title .
  • Jedes title Vorkommen ist wert 5 points .
  • Nach Punkten sortieren.

Aber ich würde nicht wissen, wo ich anfangen soll, das in SQL zu tun.

    
Tom Gullen 24.02.2011, 11:35
quelle

4 Antworten

9

Okay, lassen Sie uns Ihre Suchbegriffe in einer temporären Tabelle anzeigen:

%Vor%

Und machen wir etwas Dummes:

%Vor%

Wir haben nun jedes Vorkommen jedes Begriffs sowohl in der Beschreibung als auch im Titel gezählt.

Nun können wir diese Ereignisse summieren und gewichten:

%Vor%

Und wenn wir mehr damit tun müssen, würde ich empfehlen, das Obige in einen Subselect zu setzen

%Vor%

(Beachten Sie, dass ich angenommen habe, dass es in allen diesen Beispielen eine ID-Spalte gibt, die aber in so viele Spalten erweitert werden kann, wie notwendig ist, um den PK in der Widget-Tabelle zu definieren)

Der wahre Trick hier ist das Zählen von Vorkommen eines Wortes in einem größeren Textkörper, was gemacht wird durch:

%Vor%     
Damien_The_Unbeliever 24.02.2011, 13:22
quelle
3

Wählen Sie eine der folgenden Optionen:

  • Verwenden Sie eine Volltext-Suchmaschine (Lucene oder ähnlich), um eine gewichtete Volltextsuche durchzuführen;
  • siehe diese andere StackOverflow-Frage
  • Führe mehrere SELECT s aus, jedes mit einem Relevanz Feld, führe sie mit UNION zusammen und sortiere das Ergebnis;
  • Sortieren Sie Ihre Ergebnisse in Ihrer Anwendung, nachdem Sie die Ergebnisse abgerufen haben.
Alessandro 24.02.2011 11:42
quelle
0

Ein schneller Hack (für mysql können Sie ähnliche Konstrukte für andere dbs verwenden). Hinweis, nicht getestet.

%Vor%     
vickirk 24.02.2011 11:56
quelle
0

Vielleicht auf diese Weise

%Vor%     
zatanabee 15.11.2015 17:57
quelle