MySQL full text search

DownFall

Registered
[sql]SELECT COUNT(*) AS `cnt` FROM `messages` WHERE `msg_content` LIKE "%SSL%"[/sql]
58 открити резултата..

[sql]SELECT COUNT(*) AS `cnt` FROM `messages` WHERE MATCH(`msg_content`) AGAINST("SSL")[/sql]
0 открити резултата..

Защо се получава така? Къде греша?
 

eddyy93

Registered
Не мисля, че е от това, но замести двойните с единични кавички:

Ето така:

[sql]AGAINST('SSL')[/sql]
 

nom3r1

Registered
Пробвай така:

[sql]SELECT COUNT(*) AS `cnt` FROM `messages` WHERE MATCH(msg_content) AGAINST ('SSL') ORDER BY `cnt`;[/sql]

или

[sql]
SELECT COUNT(*) AS `cnt` FROM `messages` WHERE MATCH(msg_content) AGAINST ('SSL' IN BOOLEAN MODE) ORDER BY `cnt`;[/sql]


Като преди това колоната msg_content трябва да бъде - FULL TEXT

Иначе, ще ти даде грешка от този вид;
Can't find FULLTEXT index matching the column list

Прочети и "документацията" - http://dev.mysql.com/doc/refman/5.5/en/fulltext-search.html
 

DownFall

Registered
eddyy93 каза:
Не мисля, че е от това, но замести двойните с единични кавички:

Ето така:

[sql]AGAINST('SSL')[/sql]

Прав си, не е от това :) Не би и могло да бъде.
 

DownFall

Registered
nom3r1 каза:
Пробвай така:

[sql]SELECT COUNT(*) AS `cnt` FROM `messages` WHERE MATCH(msg_content) AGAINST ('SSL') ORDER BY `cnt`;[/sql]

или

[sql]
SELECT COUNT(*) AS `cnt` FROM `messages` WHERE MATCH(msg_content) AGAINST ('SSL' IN BOOLEAN MODE) ORDER BY `cnt`;[/sql]


Като преди това колоната msg_content трябва да бъде - FULL TEXT

Иначе, ще ти даде грешка от този вид;
Can't find FULLTEXT index matching the column list

Прочети и "документацията" - http://dev.mysql.com/doc/refman/5.5/en/fulltext-search.html

И така не става..
А съм добавил fulltext index на полето..
http://img1.uploadscreenshot.com/images/orig/2/4217064273-orig.png
 

nom3r1

Registered
Добре, но същата ли грешка дава?

ЕДИТ: Я пробвай така:

[sql]SELECT * FROM `messages` WHERE MATCH (msg_content) against ('SSL');[/sql]
 

DownFall

Registered
nom3r1 каза:
Добре, но същата ли грешка дава?

ЕДИТ: Я пробвай така:

[sql]SELECT * FROM `messages` WHERE MATCH (msg_content) against ('SSL');[/sql]

Никъде нищо не съм споменал за грешка :) Просто не ми връща резултати, а такива има, както показва заявката с %LIKE%
 

nom3r1

Registered
В крайна сметка к'во се опитваш да направиш? Търсачка, извеждане на подобни/сродни/ резултати...?

Кажи к'во е пък, може да ударим едно рамо.
 

DownFall

Registered
nom3r1 каза:
В крайна сметка к'во се опитваш да направиш? Търсачка, извеждане на подобни/сродни/ резултати...?

Кажи к'во е пък, може да ударим едно рамо.

Търсачка, да.
Принципно и с %LIKE% мога да постигна желания резултат, но значително по-тромаво обработва данните.
 

nom3r1

Registered
Пробвай това;


[sql]ALTER TABLE `messages` MODIFY `msg_content` TEXT;
ALTER TABLE `messages` ADD FULLTEXT(msg_content);

SELECT *, MATCH(msg_content) AGAINST('SSL') AS score FROM `messages` WHERE MATCH(msg_content) AGAINST('SSL') ORDER BY score DESC;
[/sql]
 

Горе