Zunächst einmal: Entschuldigung für die lange Post, ich versuche, eine schwierige Situation auf einfache Weise zu erklären und gleichzeitig versuche, so viele Informationen wie möglich zu geben.Variety on search results
Ich habe einen Algorithmus, der versucht, Benutzererwartung während einer Suche zu bestimmen. Es gibt ein paar Möglichkeiten, wie ich es benutzen kann und ich habe das gleiche Problem mit beiden, also sagen wir es zur Disambiguierung. Nun, mit einem DB-Struktur wie dieser (oder einer anderen, die die Arbeit erlaubt):
Post
ID | TITLE
---+----------------------------------------------
1 | Orange developed the first 7G phone
2 | Orange: the fruit of gods
3 | Theory of Colors: Orange
4 | How to prepare the perfect orange juice
Schlüsselwörter
ID | WORD | ABOUT
---+----------+---------
1 | orange | company
2 | orange | fruit
3 | orange | color
post_keywords
ID | POST | KEYWORD
---+-------+---------
1 | 1 | 1
2 | 2 | 2
3 | 3 | 3
4 | 4 | 2
.
Wenn in einem Suchfeld ein Benutzer nach dem Wort "Orange" sucht, würde der Algorithmus aussehen, dass orange
auf die Firma, die Farbe oder die Frucht beziehen kann und durch Beantworten ein paar Fragen, es versucht zu bestimmen, wonach der Benutzer sucht. Nach allem, was ich ein Array wie diese bekommen:
$e = array(
'fruit' => 0.153257,
'color' => 0.182332,
'company' => 0.428191,
);
In diesem Punkt weiß ich, der Benutzer wahrscheinlich für Informationen über die Frucht suchen (weil fruit
‚s Wert näher an 0
ist) und wenn ich falsch liege meine zweite Wette geht für die color
. Am Ende der Liste steht company
.
Also, mit einem Join und ORDER BY FIELD(keywords.id, 2,3,1)
kann ich den Ergebnissen die (fast) perfekte Ordnung geben:
- Orange: the fruit of gods
- How to prepare the perfect orange juice
- Theory of Colors: Orange
- Orange developed the first 7G phone
.
Nun ... wie Sie sich vorstellen können, würde ich nicht um Hilfe kommen, wenn alles so nett ist. Das Problem ist, dass das vorherige Beispiel nur 4 mögliche Ergebnisse hat. Wenn der Benutzer wirklich nach dem company
gesucht hat, kann er dieses Ergebnis in der 4. Position finden und alles ist in Ordnung. Aber ... Wenn wir 200 Post über die Frucht und 100 Post über die Farbe haben, kommt der erste Post über das Unternehmen in der Position 301..
Ich bin auf der Suche nach einer Möglichkeit, die Reihenfolge (in einer vorhersehbaren und wiederholbaren Weise) zu wechseln, jetzt, da ich weiß, dass der Benutzer wahrscheinlich nach der fruit
, gefolgt von der color
und der Firma am Ende suchen. Ich möchte einen Beitrag über die fruit
in der ersten Position (und möglicherweise die zweite) zeigen, gefolgt von einem Post über die color
, gefolgt von der company
und starten Sie diesen Zyklus erneut, bis das Ergebnis endet.
Bearbeiten: Ich werde mit einem MySQL-Trick oder mit einer Idee, den Ansatz zu ändern, aber ich kann keine Lösungen von Drittanbietern akzeptieren.
Ich würde Gruppe nach Kategorie in der Tat und das Rück das beste Ergebnis für jede Kategorie, und ermöglichen es dem Benutzer an dieser Stelle dann die Kategorie klicken, um zu sehen alle anderen Links für diese Kategorie. – Eric
Es sieht so aus, als ob Sie in MySQL einen invertierten Index mit Ihrer Keyword-Tabelle erstellen. Sie haben einige Funktionen zum Verständnis von Abfragen. Haben Sie über die Verwendung von Elasticsearch nachgedacht? dieses Gespräch von mir könnte Ihnen helfen, Ihren Kopf um, wie Sie Elasticsearch https://www.elastic.co/elasticon/conf/2016/sf/opensource-connections-the-ghost-in-the-search verwenden würde -machine –
^ich stimme zu .. ElasticSearch wird hier sehr hilfreich sein .. Auf diese Weise werden Sie in der Lage, Suchergebnisse und viele andere coole Sachen im Zusammenhang mit der Suche ... –