Bonjour,
Voilà, j'ai créer un moteur de recherche php. J'indexe le contenue de mon site dans différente table selon leur rubrique. J'ai jusqu'à 60 500 lignes dans une table.
Je dois, dans ma recherche prendre en compte les pluriels et les sonorités. Donc ma requête est vite énorme. Je dois aussi, et c'est la que ça coince, chercher l'id de l'article qui contient TOUS les mots de la recherche (sauf évidement les "et", "les"... )
Voici la requête. Parfois elle peut prendre plus d'une minute à s'exécuter !
Le champs mot contient le mot clé sans accent ni majuscule.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 SELECT * FROM ( SELECT * FROM index_recherche_entretien WHERE (mot LIKE "%chaud%" OR mot LIKE "%chauds%" OR soundex= "9O") ) AS t1 WHERE t1.id not in (0) AND ( ( t1.id in (SELECT id FROM index_recherche_entretien WHERE mot LIKE "%point%" OR mot LIKE "%points%" ) ) OR ( t1.id in (SELECT id FROM index_recherche_entretien WHERE soundex = "PO") ) ) GROUP BY t1.id ORDER BY t1.pertinence asc LIMIT 0, 11 ;
Le champs soundex contient une valeur qui correspond à un son. (le like soundex de slq n'est pas utilisé car il est fait pour l'anglais).
t1.id NOT IN (0) Sert pour autre chose d'annexe
Merci d'avance
SVP, si vous voyez un moyen de simplifier cette requête aidez moi.
Partager