2013-07-01 16 views
5

Teraz używam następującą kwerendę MySQLmysql wyszukiwania pełnotekstowego nie powracający najbardziej pomocne wyniki pierwszych

SELECT * FROM songs WHERE MATCH (title,artist) AGAINST ('$ser' IN BOOLEAN MODE) 

Teraz wszystko działa, ale nie bardzo dobrze.

Na przykład, że mam następujące warunki w mojej bazy danych

Term One 
Term Two 
Term Three 

i nie szukaj okres trzech

$ser = 'Term Three' 

to po prostu przekazujących

Term One 
Term Two 
Term Three 

Więc to dopasowanie Termin, ale to nie nadaje trzeciej kadencji wyższego priorytetu, mając zarówno termin, jak i trzy, i nie jestem pewien co zrobić, aby pojawił się nad innymi.

Mam nadzieję, że ma to sens.

Odpowiedz

3

Z tabelami MyISAM domyślnie "trzy" to stopword, dlatego nie jest indeksowany i jest ignorowany we wszystkich wyszukiwaniach.

Jeśli rzeczywiście używasz tabel MyISAM, możesz określić własną listę słów kończących lub całkowicie wyłączyć tę funkcję za pomocą opcji serwera MyISAM (ft_stopword_file).

NB: W przypadku tabel InnoDB można wyszukać opcję innodb_ft_server_stopword_table. "trzy" wydaje się nie być domyślnym hasłem dla InnoDB, ale lista słów kończących może być inna na twoim serwerze.


[edytuj]

I całkowicie pominąć faktu, że wartość logiczna wyszukiwania do not sort results automatically według trafności (jako naturalne wyszukiwania językowe zrobić). Wszystko, co musisz zrobić, to dodać ORDER BY (proszę test it here):

SELECT * FROM songs WHERE MATCH (title,artist) AGAINST ('$ser' IN BOOLEAN MODE) 
ORDER BY MATCH (title,artist) AGAINST ('$ser' IN BOOLEAN MODE) DESC 
+0

to był tylko przykład, rzeczywiste warunki nie zawierają słowa i zatrzymania przynoszą takie same wyniki. –

+0

@BelginFish Po drugie, myślę, że wszystko, co musisz zrobić, to dodać klauzulę "ORDER BY". Przejrzyj moją edycję. – RandomSeed

+0

Dziękuję pracowałeś jak czar :) –