[RESOLU] Recherche fulltext dans grande bdd et autocomplete

Eléphant du PHP | 136 Messages

29 oct. 2015, 09:12

Bonjour

J'essaye d'installer un script autocomplete pour une recherche dans une base de donnée rassemblant près de 15 millions de résultats. Pour l'heure ma recherche query est très lente (entre 5 et 10 sec) pour avoir un résultat (avec un query utilisant LIKE et %".
J'ai donc indexé ma table et tenté d'utiliser MATCH() AGAINST ()
Or ma recherche ne fonctionne plus (elle se fait sur le premier caractère rentré mais ne se relance pas sur les caractères suivants).

Voici mon code :

JS
$(document).ready(function(){
    $('#search-bano').autocomplete({
    serviceUrl: 'research.php',
    dataType: 'json',
    onSelect: function (suggestion) {
        console.log(suggestion);
    }
 });
});

HTML
<input type="text" id="search-bano" value="">
PHP
$term = strip_tags(substr($_GET['query'],0, 100));
$term = utf8_decode($term);
$term = mysql_escape_string($term); // Attack Prevention
if($term!="")
{

 $query = mysql_query("select * from bano where MATCH(voie)  AGAINST ('$term*')");
 $suggestions = array();
 if (mysql_num_rows($query))
 {
    while($row = mysql_fetch_assoc($query))
    {
        $display=''.$row['voie'].'';
        $suggestions[] = array(
        "value" => $display,    
        "idstreet" => $row['idstreet']);
  }       
 }

 echo json_encode(array('suggestions' => $suggestions));
}
Si je tape dans mon champ input "Rue du Général de Gaulle" la console Firebug me renvoie : GET /research.php?query=R (soit que le 1e caractère de ma recherche

Auriez vous une idée pour m'aider ?
Modifié en dernier par Bisvan le 29 oct. 2015, 10:45, modifié 1 fois.
Bisvan :)

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

29 oct. 2015, 09:28

Si je tape dans mon champ input "Rue du Général de Gaulle" la console Firebug me renvoie : GET /research.php?query=R (soit que le 1e caractère de ma recherche
Et tu n'as pas d'autres requêtes GET avec les autres caractères tapés ?

Si c'est la seule requête GET, alors tu as un problème de javascript, vérifie la console JS et dis nous en + sur ce que tu utilises comme solution d'autocompletion
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphant du PHP | 136 Messages

29 oct. 2015, 10:06

Non justement qu'un seul GET.
J'utilise la librairie autocomplete de jquery
Bisvan :)

Mammouth du PHP | 2703 Messages

29 oct. 2015, 10:15

des pistes, mettre un limit à la requete
mettre un nombre minimal de caractère à l'autocomplete avant de faire un get

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

29 oct. 2015, 10:49

J'ai un doute sur le onSelect pour l'autocomplete
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphant du PHP | 136 Messages

29 oct. 2015, 10:55

Effectivement avec un query utilisant MATCH/AGAINST si le mot est trop court il ne renvoie aucun résultat.
j'ai donc rajouté un if() demandant un nombre minimum de 5 caractères pour lancer la recherche et cela fonctionne.
Tout bête quoi :-/
Bisvan :)