Fichier XML Vs Base de données

WRInaute passionné
Bonjour à tous!

La problématique est la suivante... J'ai actuellement un petit formulaire de recherche qui fonctionne via AJAX.

Solution actuelle: AJAX
=> A chaque fois que l'utilisateur tape une lettre, cela déclenche un appel à la base de données (MySQL)
=> La requête en elle même est assez simple... Mais assez lourde quand même si bien que certaines fois, le formulaire bogue (échec lors de la connection à la BDD)
=> La requête me permet d'avoir un tri par pertinence des résultats (avec la fonction MATCH - recherche full text) et je limite au 10 premiers résultats (les plus pertinents).

Solution via un fichier texte/xml:
=> Le fichier xml/texte est construit une seule fois (et disponible sur le ftp)
=> A chaque fois que l'utilisateur tape une lettre, je lis ce fichier avec php et je sors les 10 résultats les plus pertinents.
=> ce fichier XML va contenir 3000-4000 lignes
Avantage: je ne fais pas appel à la BDD
Désavantage: je surcharge le serveur...

Je suis sur un hébergement mutualisé

Quelqu'un à une idée de la solution optimale...?

Un grand merci par avance!

Anto
 
WRInaute passionné
Bonjour,

J'utiliserai la solution ajax avec un fichier texte vu que tu ne fais que le lire et qu'il n'est pas fréquemment modifié.
Mais avec un minimum de lettres avant de lancer la recherche afin de d'éviter des recherches trop vastes.
 
WRInaute passionné
Ok pour le fichier texte.
J'ai déjà fait en sorte qu'aucun appel ne soit fait si la taille de la requête est inférieure à 3 caractères.

J'avais donc fichier qui contient ceci:

(en format texte)

Code:
Saumon de l'atlantique|http://www.example.com/Saumon_Atlantique
Société A|http://www.example.com/Societe_a
etc... etc...

Ensuite, je me suis dit... trop compliqué, c'est plus simple d'avoir directement les liens...:

Code:
<a href="http://www.example.com/Saumon_Atlantique">Saumon de l'atlantique</a>
<a href="http://www.example.com/Societe_a">Société A</a>
etc... etc...

... et de faire une recherche en utilisant un pregmatch sur les ancres des liens...

Le soucis, c'est que je n'arrive pas à trouver l'équivalent d'un MATCH (en full texte) pour ordonner mes résultats par pertinence...

une idée... :)

Merci par avance!

Anto
 
WRInaute accro
Anto1982 a dit:
=> La requête en elle même est assez simple... Mais assez lourde quand même si bien que certaines fois, le formulaire bogue (échec lors de la connection à la BDD)
=> La requête me permet d'avoir un tri par pertinence des résultats (avec la fonction MATCH - recherche full text) et je limite au 10 premiers résultats (les plus pertinents).
Tu as trouvé de quoi venait ces échecs de connexion, "too many connections" ?
Tu as mis un INDEX sur le champ où se fait la requête FULLTEXT ?

Car je ne vois pas trop comment on peut faire une recherche style FULLTEXT sur un fichier (il faut penser aussi aux stopwords).
Peut-être avec un exec() de grep, mais pour ce qui est de limiter aux plus pertinents (relevance en mysql), je ne vois pas.

Pour la solution par fichier XML ou texte, je te conseille plutôt JSON (ou array sérialisé), je trouve que c'est plus facile à traiter des 2 côtés en JS et PHP (et ca prend souvent moins de place que XML).
 
WRInaute passionné
Heu, ta BDD consomme aussi des ressources sur le serveur.

OK merci pour l'info. (j'y connais rien....)


Tu as trouvé de quoi venait ces échecs de connexion, "too many connections" ?
Tu as mis un INDEX sur le champ où se fait la requête FULLTEXT ?
Oui Probablement "too many connections"
Oui bien sur (je crois que sinon, la requête n'aboutit pas si il n'y a pas d'index fulltext)

Car je ne vois pas trop comment on peut faire une recherche style FULLTEXT sur un fichier (il faut penser aussi aux stopwords).
Moi non plus :-D
Peut-être avec un exec() de grep, mais pour ce qui est de limiter aux plus pertinents (relevance en mysql), je ne vois pas.
=> Je vais creuser un peu cette piste...

Pour la solution par fichier XML ou texte, je te conseille plutôt JSON (ou array sérialisé), je trouve que c'est plus facile à traiter des 2 côtés en JS et PHP (et ca prend souvent moins de place que XML).
=> Interessant, je vais jeter un oeil du coté JSON.

==
L'avantage de la seconde solution (qui n'est pas moindre) est aussi de regrouper les résultats provenant de 2 tables différentes (produits et sociétés) dans un même fichier, ce qui permet d'avoir en une seule recherche des résultats mixtes.
 
WRInaute passionné
Boaf... trop compliqué ça me c****** les c*****.

Je vais opter pour la solution suivante:

- Une nouvelle table dans MySQL qui contient 2 colonnes (url + titre/mots clés) et qui regroupe mes 2 types de données produits et sociétés. Basta. :-)
 
WRInaute passionné
Et pourquoi ne pas passer par Lucene pour ton moteur de recherche ?

Parceque je n'ai pas envie de perdre 2-7 jours :( (et oui, c'est probablement à moi (non spécialiste) le temps qu'il me faudra pour comprendre, modifier, intégrer et implémenter ce système... qui sera probablement trop lourd pour ce que je veux en faire...: un simple "quick search box"...)

En tout cas merci pour le tuyau!
 

➡️ Offre MyRankingMetrics ⬅️

pré-audit SEO gratuit avec RM Tech (+ avis d'expert)
coaching offert aux clients (avec Olivier Duffez ou Fabien Faceries)

Voir les détails ici

coaching SEO
Discussions similaires
Haut