[ASP] moteur de recherche pour une base access

moteur de recherche pour une base access [ASP] - ASP - Programmation

Marsh Posté le 23-06-2004 à 17:54:45    

Bon tout d'abord, simple :
- Comment on ordonne par pertinence bordel, genre si l'enregistrement contient les 3 mots clefs qu'on a tapé, ben il afficher en premier/enregistrement contenant deux mots clefs? J'vois même pas le début d'une piste.
- Comment surligné les mots qui ont fait que l'enregistrement est le résultats de la requêtes (donc c'est pas forcément les mots entrés exactement hein, vu que par exemple, je tiens pas compte des accents, de la fin ou début du mot, de la casse...)
- N'y a t'il pas moins lourd que ça pour tester tous les mots, comme requête sous ACCESS?  
>RechercheText est la chaîne de mot(s) clef(s) renvoyée par le formulaire, ayant subie tout un traitement la pauvre, elle est toute belle maitenant et donne pleins de bons résultats, mais c'est lourd... :sweat:  

Citation :

listecle = Split(RechercheText)," ",-1, 1)    
SQL = "SELECT links.name, links.url, links.langue, links.resume FROM links WHERE links.Valide=1"
i=0
    While i<=UBound(listmotcle)
 listmotcle(i) = trim(listmotcle(i))
if i>0 then
SQL = SQL&" AND "  
end if
SQL = SQL&" name LIKE '%"&listmotcle(i)&"%' OR links.Valide=1 AND resume LIKE '%"&listmotcle(i)&"%'"      
    i=i+1
    Wend


Message édité par dalida le 23-06-2004 à 18:02:53

---------------
90-60-90 -Guish c un homme humain, un vrai-
Reply

Marsh Posté le 23-06-2004 à 17:54:45   

Reply

Marsh Posté le 23-06-2004 à 17:56:05    

impossible avec Access.
 
- Il te faut un outils de "full search", tel que tu peux en avoir avec SQL Server ou MySQL.
- Tu te fais un bête "replace" en ASP sur le résulat.
- Cf. premier point.


Message édité par Arjuna le 23-06-2004 à 17:56:51
Reply

Marsh Posté le 23-06-2004 à 18:00:06    

Pour le second point, j'utilise ça sur un site :
 


function ChangeFont(original, find, start, before, after)
 if original <> "" and find <> "" then
  strTmp = ucase(original)
  findTmp = ucase(find)
  pos = instr(start, strTmp, findTmp)
  if pos <> 0 then
   original = ChangeFont(left(original, pos - 1) & before & mid(original, pos, len(find)) & after & right(original, len(original) - ((pos - 1) + len(find))), find, pos + len(find) + len(before) + len(after), before, after)
  end if
 end if
 ChangeFont = original
end function
 
function ChangeFont2(original, find, start, before, after)
 tabfind = split(find, " " )
 for i = lbound(tabfind) to ubound(tabfind)
  original = ChangeFont(original, tabfind(i), start, before, after)
 next
 ChangeFont2 = original
end function


 
<%=ChangeFont2(rs("description" ), keyword, 1, "<b><i><font color='#AA0000'>", "</font></i></b>" )%>

Reply

Marsh Posté le 23-06-2004 à 18:04:04    

http://perso.wanadoo.fr/magicbuzz/recherche.jpg
 
 
Mais avec SQL Server et son moteur d'indexation, évidement c'est mieu foutu, on peut trier par pertinance :
 
http://perso.wanadoo.fr/magicbuzz/recherche2.jpg


Message édité par Arjuna le 23-06-2004 à 18:08:30
Reply

Marsh Posté le 23-06-2004 à 18:12:36    

Oui c'est nickel ça mais , j'ai pas compris comment t'utilises la fonction que je comprends que partiellement? :whistle:  

Citation :

<%=ChangeFont2(rs("description" ), keyword, 1, "<b><i><font color='#AA0000'>", "</font></i></b>" )%>


 
merci pour ton aide si rapide  :hello:


---------------
90-60-90 -Guish c un homme humain, un vrai-
Reply

Marsh Posté le 23-06-2004 à 18:15:31    

au fait j'ai pas le choix, ils veulent pas d'autre chose que leur foutue base access, pas de mysql, alors sqlserver, faut même pas espérer vu le prix [:markdavis]


---------------
90-60-90 -Guish c un homme humain, un vrai-
Reply

Marsh Posté le 23-06-2004 à 18:18:45    

Citation :

<%=ChangeFont2(rs("description" ), keyword, 1, "<b><i><font color='#AA0000'>", "</font></i></b>" )%>


 
Qu'est-ce que keyword, un des mots clefs en question, la chaine entière de keyword, et le 1 il correspond à quoi?


---------------
90-60-90 -Guish c un homme humain, un vrai-
Reply

Marsh Posté le 23-06-2004 à 20:15:34    

la chaine entière, normalement, mes fonctions, si j'ai tout mis (c pas sur ça :D) vont découper ça en mots et s'occuper du reste ;)


Message édité par Arjuna le 23-06-2004 à 20:15:54
Reply

Marsh Posté le 23-06-2004 à 20:16:23    

Le 1, je sais plus, il est en dur dans ma page, donc à priori tu le laisse :D :D :D

Reply

Marsh Posté le 23-06-2004 à 20:17:46    

C'est bien ce que je pensais. Le 1 sert à la récusrivité, il indique où on en est dans la chaîne, donc il faut le laisser, puisque tu pars du caractère 1 pour chercher les mots ;)

Reply

Marsh Posté le 23-06-2004 à 20:17:46   

Reply

Marsh Posté le 24-06-2004 à 15:40:12    

snif je voudrais l'améliorer un peu et faire changer la couleur de fond en fonction de l'index du mot correspondant dans le tableau de valeur, j'y arrive pas du tout, une idée?

Citation :

ChangeFont2(RS("resume" ), Request.Form("recherche" ), 1, "<span class=resultats"&indexdumotcorrespond&">", "</span>" )


 
ce qui donnerait class=resultats1 si c'est le premier mot du tableau
class=resultat2 si c'est le second...
 
Et je crée des les styles résultat1, résultat2... dynamiquements en fonction du ubound de la liste.
 
Bon pour le moment je pourrais en mettre 5 en dur je pense que ça suffirait de toute façon>
style comme ça>

Citation :

<style type="text/css">
<!--
 
.resultats1 {
 background-color: #FFFF66;
}
.resultats2 {
 background-color: #FF6600;
}
.resultats3 {
 background-color: #33FF66;
}
.resultats4 {
 background-color: #99FF66;
}
.resultats5 {
 background-color: #FFFF66;
}
-->
 
</style>


mais impossible de récupérer l'index du tableau de chaine qui à correspondu, j'arrive pas à réecrire la fonction  pour qu'il le fasse ça doit être con pourtant [:sisicaivrai]
 
oui c du pompage de googletoolbarstyle c clair [:ddrs55]


Message édité par dalida le 24-06-2004 à 15:40:47

---------------
90-60-90 -Guish c un homme humain, un vrai-
Reply

Marsh Posté le 24-06-2004 à 15:59:17    

g bidouillé ça marche mais c pas du joli :/
voilà la new fonction

Citation :

function ChangeFont2(original, find, start, before, after)  
 tabfind = split(find, " " )  
 for i = lbound(tabfind) to ubound(tabfind)  
endofspan=">"
  original = ChangeFont(original, tabfind(i), start, before&(i)&endofspan, after)  
   
 next  
 ChangeFont2 = original  
end function


 
et sa new utilisation

Citation :

ChangeFont2(RS("resume" ), Request.Form("recherche" ), 1, "<span class=resultats", "</span>" )


 
Mouais
Si quelqu'un a mieux je prends :)


---------------
90-60-90 -Guish c un homme humain, un vrai-
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed