2017-05-10 2 views
0

J'ai des articles et liste dans laquelle les catégories existent:recherche Sphinx requête - condition pour les numéros dans la colonne varchar

id | name  | categories(varchar) 
1 | bike red | 2,5,18 
2 | bike black | 4,7,13 

Avec Sphinx j'ai besoin de serach par exemple: vélo et seulement de la catégorie

Est-ce une bonne façon de faire une recherche dans les catégories de colonnes?

En MySql je pourrais écrire: WHERE nom LIKE '% vélo%' et catégories LIKE '% 5%'

Mais mon index Sphinx est grand et la recherche pourrait être pas efective. Y a-t-il un moyen de créer une liste ENUM entière ou? Quelle pourrait être une bonne solution?

Merci

Répondre

0

Sphinx a Multi-Value Attributs http://sphinxsearch.com/docs/current.html#mva. à peu près parfait pour ça!

Cela fonctionne un peu comme un set numérique dans MySQL! (vous avez plusieurs catégories, donc set, et non enum)

Il analysera même automatiquement une liste de chaînes de nombres séparés par des virgules lors de l'indexation.

sql_query = SELECT id,name,categories FROM item 
sql_attr_multi = uint categories from field; 

Ensuite, une requête sphinxQL ...

SELECT * FROM item WHERE MATCH('bike') AND categories=5 

(Cela peut sembler déroutant si familar avec MySQL. Un filtre d'égalité sur un attribut MVA, actully signifie juste égale l'une des valeurs. Si vouloir pourrait écrire categories IN (5) - même effet)