Създайте три пълнотекстови индекса
- a) един в колоната с ключови думи
- б) един в колоната със съдържание
- в) едно в колоната за ключови думи и съдържание
След това вашата заявка:
SELECT id, keyword, content,
MATCH (keyword) AGAINST ('watermelon') AS rel1,
MATCH (content) AGAINST ('watermelon') AS rel2
FROM table
WHERE MATCH (keyword,content) AGAINST ('watermelon')
ORDER BY (rel1*1.5)+(rel2) DESC
Въпросът е, че rel1
ви дава уместността на вашата заявка само в keyword
колона (защото сте създали индекса само за тази колона). rel2
прави същото, но за content
колона. Вече можете да добавите тези два резултата за релевантност заедно, като приложите всяко претегляне, което желаете.
Въпреки това, вие не използвате нито един от тези два индекса за действителното търсене. За това използвате третия си индекс, който е и в двете колони.
Индексът на (ключова дума, съдържание) контролира вашето припомняне. Ака, какво се връща.
Двата отделни индекса (един само за ключова дума, един за съдържание) контролират вашата уместност. И можете да приложите свои собствени критерии за претегляне тук.
Имайте предвид, че можете да използвате произволен брой различни индекси (или да променяте индексите и тежестите, които използвате по време на заявка въз основа на други фактори, може би... само да търсите по ключова дума, ако заявката съдържа дума за спиране... намалете отклонението на тежестта за ключови думи, ако заявката съдържа повече от 3 думи ... и т.н.).
Всеки индекс използва дисково пространство, така че повече индекси, повече диск. И от своя страна, по-голям отпечатък на паметта за mysql. Освен това вмъкването ще отнеме повече време, тъй като имате повече индекси за актуализиране.
Трябва да сравните производителността (като внимавате да изключите кеша на заявките на mysql за сравнителен анализ, в противен случай резултатите ви ще бъдат изкривени) за вашата ситуация. Това не е ефективно за Google, но е доста лесно и "извън кутията" и почти сигурно е много по-добре от използването на "харесвам" в заявките.
Намирам, че работи много добре.