2016-04-05 15 views
0

Ich habe eine Tabelle von Filmen (movie_id, Titel), ein Film kann viele Titel (verschiedene Sprachen) haben. Ich möchte die Volltextsuche nach allen Titeln implementieren, dann sollten Filme mit der gleichen Relevanz nach Datum sortiert werden. Jetzt bin ich mit Sphinx und tun dies:Sphinx: Wie kann ich die Standard-Ranking-Methode ändern?

sql_joined_field = all_movie_titles from query; select movie_id as id, title  from tbl_movie_titles order by movie_id 

Es ist das einzige Feld, das für die Suche verwendet Wie ich verstehe, auf diese Weise Sphinx Suche Spiele von Keyword in jedem Titel eines Films, aber einige Filme haben 2 Titel, während ein anderer, zum Beispiel 10. Aufgrund der Schlüsselwörter oft in verschiedenen Titeln eines Films Duplikate berechnet Sphinx Ergebnis Relevanz Gewicht hängt von Übereinstimmungen in allen Titeln eines Films ab. Aus diesem Grund haben zwei Filme, die die gleiche Relevanz haben sollten, unterschiedliche Gewichte. Ich habe versucht, verschiedene Rangers zu verwenden, aber die Ergebnisse sind sowieso schlecht. Wie kann ich Sphinx dazu bringen, Gewicht für jeden Titel eines Films unabhängig zu berechnen und dann den höchsten zu nehmen? Wenn diese Aufgabe einfacher durch eine andere Suchmaschine gelöst werden kann, wie elasticsearch mir sagt. Dank

Antwort

1

Sie haben erstellt effektiv ein Feld, das nur enthält alle die Titel als eine lange Zeichenfolge verkettet (die ‚verbunden‘ in der Definition)

So multi-Titel Film, die Wörter mehrere haben Mal, was wie gesagt das Ranking beeinflussen kann.

Sie scheinen derzeit eingerichtet zu sein, um Ihre Sphinx Dokument als Film zu haben. dh ein Dokument pro Film (unabhängig davon, welche Daten Sie haben für den Film)


One Optionen wäre stattdessen ein Dokument pro Titel haben zu ändern (dh Film/Sprache Kombination), dann die Das Ranking wird "innerhalb" der einen Sprache sein.

Da Sie (vermutlich) nur ein Ergebnis pro Film wollen, können Sie die Abfragezeit GROUP BY Option verwenden. (was bedeutet, sicherzustellen, dass Sie movie_id als attribute haben)