[MySql] Fulltext qui foire

Fulltext qui foire [MySql] - SQL/NoSQL - Programmation

Marsh Posté le 20-06-2007 à 11:54:37    

Hello  :hello:  
 
Je fais une recherche comme cela  

Code :
  1. SELECT * FROM table WHERE MATCH (name) AGAINST ('"Aspire 9422"' IN BOOLEAN MODE)


 
Je veux qu'il me sorte donc uniquement les lignes contenant "Aspire 9422" dans n'importe quel ordre.
Ca me resort rien du tout  :heink:  :cry:

Reply

Marsh Posté le 20-06-2007 à 11:54:37   

Reply

Marsh Posté le 20-06-2007 à 11:59:12    

manque des + dans ton against vu que tu utilises le mode booléen.
 
remarque: j'espere que tu as bien mis un index fulltext, sinon prépare toi à tes performances pitoyables.

Reply

Marsh Posté le 20-06-2007 à 12:00:03    

pourquoi tu mets in boolean mode sans mettre d'operateur + -  ?
( [ulr=http://dev.mysql.com/doc/refman/5.0/fr/fulltext-boolean.html] liste des operateurs[/url])

 

pas de message d'erreur avec mysql_error ?
ton index fulltext fonctionne ?

 


EDIT :burnaid


Message édité par flo850 le 20-06-2007 à 12:00:26
Reply

Marsh Posté le 20-06-2007 à 12:03:58    

J'ai un index fulltext
 
Je souhaite avoir les deux mots ensembles et je peux pas découper ma chaine de caracteres a la volée.
Comment faire ?

Code :
  1. SELECT * FROM table WHERE MATCH (name) AGAINST ('+"Aspire 9422"' IN BOOLEAN MODE)

?


Message édité par nycius le 20-06-2007 à 12:04:12
Reply

Marsh Posté le 20-06-2007 à 12:08:16    

tu peux enlever IN BOOLEAN MODE  
 
sinon, est ce que ta table comporte assez d'enregistrements ? est ce que Aspire 9422 est présent souvent ( dans + de 50% des cas  ) ?  
 
dans ces cas la , certains mots sont considérés comme non significatifs et ignorés  

Reply

Marsh Posté le 20-06-2007 à 12:08:47    

lire la doc?

Citation :

#

 

'"deux mots"'
Recherche les lignes qui contiennent exactement la phrase ``deux mots'' (par exemple, les lignes qui contiennent ``deux mots d'amour'' mais pas ``le mot deux''). Notez que les caractères ‘"’ qui entourent la phrase délimitent la phrase. Ils ne délimitent pas la chaîne.

 
flo850 a écrit :

tu peux enlever IN BOOLEAN MODE


les deux n'ont pas tout à fait la même utilité

 
flo850 a écrit :

sinon, est ce que ta table comporte assez d'enregistrements ? est ce que Aspire 9422 est présent souvent ( dans + de 50% des cas  ) ?


le mode booléen par exemple n'est pas soumis au seuil de 50% ;)

 


Message cité 2 fois
Message édité par anapajari le 20-06-2007 à 12:10:01
Reply

Marsh Posté le 20-06-2007 à 12:09:41    

il est présent 1 seule fois sur 1800
Je veux sortir uniquement Aspire 9422 en complet, pas 9422 tout seul ou Aspire

Reply

Marsh Posté le 20-06-2007 à 12:10:06    

anapajari a écrit :

lire la doc?  

Citation :

#
 
'"deux mots"'
Recherche les lignes qui contiennent exactement la phrase ``deux mots'' (par exemple, les lignes qui contiennent ``deux mots d'amour'' mais pas ``le mot deux''). Notez que les caractères ‘"’ qui entourent la phrase délimitent la phrase. Ils ne délimitent pas la chaîne.



 
Ca a été fait, ca ne fonctionne pas

Reply

Marsh Posté le 20-06-2007 à 12:11:06    

nycius a écrit :

il est présent 1 seule fois sur 1800
Je veux sortir uniquement Aspire 9422 en complet, pas 9422 tout seul ou Aspire


Alors pourquoi utiliser un match/against plutot qu'un like [:w3c compliant][:w3c compliant][:w3c compliant]

Reply

Marsh Posté le 20-06-2007 à 12:12:49    

anapajari a écrit :

Alors pourquoi utiliser un match/against plutot qu'un like [:w3c compliant][:w3c compliant][:w3c compliant]


 
Parce que le LIKE fonctionnera pour "Aspire 9422" mais pas "9422 Aspire"

Reply

Marsh Posté le 20-06-2007 à 12:12:49   

Reply

Marsh Posté le 20-06-2007 à 12:16:03    

anapajari a écrit :

lire la doc?  

Citation :

#
 
'"deux mots"'
Recherche les lignes qui contiennent exactement la phrase ``deux mots'' (par exemple, les lignes qui contiennent ``deux mots d'amour'' mais pas ``le mot deux''). Notez que les caractères ‘"’ qui entourent la phrase délimitent la phrase. Ils ne délimitent pas la chaîne.


 
 
les deux n'ont pas tout à fait la même utilité
 
 
le mode booléen par exemple n'est pas soumis au seuil de 50% ;)


certes, mais utiliser le mode booleens ( saufe erreur de ma part )implique d'utiliser les operateurs, sinon, on retombe en mode normal ( seuil compris )

Reply

Marsh Posté le 20-06-2007 à 12:58:51    

nycius a écrit :

Parce que le LIKE fonctionnera pour "Aspire 9422" mais pas "9422 Aspire"


Ok donc c'est normal que "Aspire 9422" fonctionne pas comme tu le voudrais alors.
Il faut que tu fasses against(' +"Aspire 9422" +"9422 Aspire" ) mais ça va pas te plaire non car tu vas dire que tu peux pas couper ta chaine :o

Reply

Marsh Posté le 20-06-2007 à 14:16:53    

si je fais against('Aspire 9422') ca marche nikel, j'ai les deux aussi bien Aspire 9422 que 9422 aspire, seulement j'ai aussi aspire 5130, etc

Reply

Marsh Posté le 20-06-2007 à 14:41:33    

Code :
  1. SELECT * FROM table WHERE name like '%Aspire 9422%' OR name like '%9422 Aspire%'


 
ça irai pas mieux ça ?  :??:
 
 
P.S. je connais pas against  [:ddr555]

Message cité 1 fois
Message édité par ajnag le 20-06-2007 à 14:42:13
Reply

Marsh Posté le 20-06-2007 à 14:51:45    

nycius a écrit :

si je fais against('Aspire 9422') ca marche nikel, j'ai les deux aussi bien Aspire 9422 que 9422 aspire, seulement j'ai aussi aspire 5130, etc


C'est toujours normal [:w3c compliant]
ton against('Aspire 9422') sans boolean equivaut à un ('+Aspire +9422' in boolean) ... Ce que t'expliquais Flo850.
Et donc oui ce remonte ce qu'il faut mais ça remonte aussi des trucs en trop [:spamafote]
 

ajnag a écrit :

Code :
  1. SELECT * FROM table WHERE name like '%Aspire 9422%' OR name like '%9422 Aspire%'

ça irai pas mieux ça ?  :??:[:ddr555]


non parce qu'il peut pas "triturer" sa chaine (enfin si j'ai bien compris)

Reply

Marsh Posté le 20-06-2007 à 16:03:43    

ah ok
 
en plus me suis trompé, c'etait pas OR mais AND qu'il fallait :D

Reply

Marsh Posté le 20-06-2007 à 16:14:16    

anapajari a écrit :

C'est toujours normal [:w3c compliant]
ton against('Aspire 9422') sans boolean equivaut à un ('+Aspire +9422' in boolean) ... Ce que t'expliquais Flo850.
Et donc oui ce remonte ce qu'il faut mais ça remonte aussi des trucs en trop [:spamafote]
 
 
non parce qu'il peut pas "triturer" sa chaine (enfin si j'ai bien compris)


 
Exact, c'est pour ca que j'ai fait au depart  

Code :
  1. SELECT * FROM table WHERE MATCH (name) AGAINST ('"Aspire 9422"' IN BOOLEAN MODE)


 
Qui normalement devrait me sortir que les deux mots ensemble

Reply

Marsh Posté le 20-06-2007 à 17:24:08    

euh non  toujours pas [:w3c compliant], t'es sur que tu veux pas lire la doc?

Citation :

Recherche les lignes qui contiennent exactement la phrase ``deux mots'' (par exemple, les lignes qui contiennent ``deux mots d'amour'' mais pas ``le motsdeux'')


Message édité par anapajari le 20-06-2007 à 17:24:16
Reply

Marsh Posté le 15-11-2007 à 16:45:08    

Hello,
 
Dites je reviens car j'ai un soucis, j'utilise ca :

Code :
  1. SELECT A1.id,A1.titre,A1.code_soundex,A2.description FROM prods A1 INNER JOIN prods_det A2 ON A1.id = A2.id_produit WHERE MATCH (A1.titre) AGAINST('+nokia n93' IN BOOLEAN MODE)


 
Seulement ca me resort rien.
Si derriere je fais :

Code :
  1. SELECT A1.id,A1.titre,A1.code_soundex,A2.description FROM prods A1 INNER JOIN prods_det A2 ON A1.id = A2.id_produit WHERE ucase(A1.titre) LIKE '%nokia%' AND ucase(A1.titre) LIKE '%n93%'


 
ca passe bien.
 
J'ai fait quelque chose de mal ?  :??:


Message édité par nycius le 15-11-2007 à 16:45:32
Reply

Marsh Posté le 15-11-2007 à 17:24:46    

je parie sur titre en UTF8_BIN :o

Reply

Marsh Posté le 15-11-2007 à 18:03:13    

anapajari a écrit :

je parie sur titre en UTF8_BIN :o


 
nop

Reply

Marsh Posté le 16-11-2007 à 10:04:00    

bizarre à la lecture des deux requêtes tout me laisse à penser que c'est une histoire de "case sensitive" ton problème.
 
Normalement, match against n'est pas sensible à la casse sauf dans le cas ou le champs qu'il explore a du contenu considéré comme binaire (par exemple encodage utf8_bin).
Mais on peut aussi rencontrer le problème si on match sur deux champs de type différents (  str et int), mySQL considère alors leur agglomérat comme binaire.
 
Mais du coup si c'est pas ça je sais pas :o

Reply

Marsh Posté le 17-11-2007 à 23:14:47    

Non tout est ok du coté del'encodage, je comprends pas non plus :(

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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