Frage

Ich bin neu in Sphinx, und ich bin seting es auf eine neue Website auf. Es funktioniert gut, und wenn ich die Suche mit der Suche in der Konsole, alles funktioniert.

Mit dem PHP-API und die durchsuchen, gibt mir die auch dieselben Ergebnisse. Aber es gibt mir nur ids und Gewichte für die gefundenen Reihen. Gibt es eine Möglichkeit, einige Textfelder togheter mit dem ‚Streichholz‘ Hash zu bringen, zum Beispiel?

Wenn es keine Möglichkeit gibt, dies zu tun, hat jemand eine gute Vorstellung davon, wie die Datensätze aus der Datenbank (SQL) in der Sphinx Gewicht Sortierreihenfolge abzurufen (alle ihnen zur gleichen Zeit mit der Suche)?

War es hilfreich?

Lösung

Sie können einen MySQL-FIELD () Funktionsaufruf in der ORDER BY verwenden alles, was in der Reihenfolge Sphinx angegeben, um sicherzustellen, ist.


$idlist = array();
foreach ( $sphinx_result["matches"] as $id => $idinfo ) {
    $idlist[] = "$id";
}
$ids = implode(", ", $idlist);

SELECT * FROM table WHERE id IN ($ids) ORDER BY FIELD(id, $ids)

Andere Tipps

Ja, Sphinx bringt nicht die Ergebnisse. Aber ich fand eine einfache Möglichkeit, um die Abfrage mit der IN () Klausel neu zu ordnen, alle zusammen zu bringen.

Quering etwas

SELECT * FROM table WHERE id IN(id_list... )

nur die Indizierung das Ergebnis mit ihren ID in der Tabelle:

while ($row = mysql_fetch_objects)
   $result[$row->id] = $row; 

und mit den passenden Ergebnissen von Sphinx, ist es sehr einfach neu zu ordnen:

$ordered_result = array();
foreach ($sphinxs_results['matches'] as $id => $content)
   $ordered_result[] = $result1[$id];

Dies wird funktionieren, wenn Ihr $ sphinxs_results in der richtigen Reihenfolge sind.

seine fast pat Antwort, aber mit weniger einer Schleife. Kann einige diference in großen Ergebnissen machen, glaube ich.

unfortually hat Sphinx nicht zurückkehrt abgestimmt Felder, nur seine ids (sphinx Index keine Daten enthält - nur Hash von Daten). Stellen Sie zu diesem Problem finden Sie auf der sphinxsearch.com Forum finden können.

Wie Alex sagt, Sphinx nicht zurück, dass die Informationen. Sie werden die IDs verwenden, um sich um die Datenbank abzufragen - nur eine Schleife durch jede ID, erhalten Sie Ihre relevanten Daten aus, um die Ergebnisse in Gewichtungs Ordnung zu halten. Um sie alle in einer Abfrage zu tun, können Sie so etwas wie die folgenden versuchen könnten (psuedo-Code - PHP ist nicht meine Sprache der Wahl):

results = db.query("SELECT * FROM table WHERE id IN (%s)", matches.join(", "));
ordered_results = [];

for (match in matches) {
  for (result in results) {
    if (result["id"] == match) {
      ordered_results << result;
    }
  }
}

return ordered_results;
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top