2017-02-18 1 views
0

Plutôt que le tri par défaut dans sphinx, je voudrais trier/pondérer les résultats en fonction d'un champ d'une autre table. Mon schéma ressemble à ceci:Utiliser une colonne de table différente pour trier les poids de sphinx

node { 
    id 
    weight 
} 

node_text { 
    id 
    node_id 
    text 
} 

(Note: Il n'y a qu'un seul node_text pour chaque nœud)

Je veux index node_text, mais être en mesure de retourner des résultats ordonnés par node.weight sphinx. Je suppose que je besoin de quelque chose comme ceci:

sql_query = SELECT node_id, text from node_text 

sql_joined_field = weight from query; SELECT id, weight FROM node ORDER BY id ASC 

Est-ce la bonne façon de rechercher des correspondances ORDER BY node.weight DESC? Je voudrais être en mesure d'exécuter une requête comme suit:

mysql> SELECT * FROM nodetest1 WHERE MATCH('foobar') ORDER BY weight DESC; SHOW META; 

Répondre

1

sql_joined_field, fait un champ , vous avez besoin weight à stocker dans un attribut. Serait facile simplement rejoindre ...

sql_query = select node_id, text, weight from node_text inner join node using (node_id=node.id) 
sql_uint_attr = weight 

Cela devrait alors travailler pour vous SphinxQL requête :)