У меня есть таблица базы данных mysql (CommonWordsTable), которая содержит несколько записей:
"word-A" - "words related to word-A"
Например:
columnA - columnB
chair - furniture;table;office-chair;dining-chair;wooden chair;metal chair
В настоящее время я использую запрос сопоставления полного текста MySQL длясопоставить предложение с этими словами:
select columnA,
max(match(columnA, columnB) against ('" + sentence + "')) as relevance
from CommonWordsTable
where match(columnA, columnB) against ('" + sentence + "')
group by columnA
order by relevance desc limit 5;
Я использую еще один запрос, который берет слова соответствия предложений из таблицы RareWordsTable (с такой же структурой) и сопоставляет эти слова с CommonWordsTable:
select columnA
from CommonWordsTable
where match(columnA, columnB) against(
(select concat(colA, ' ' , colB)
from RareWordsTable
where match(colA) against ('" + sentence + "') limit 1)
)
limit 3;
Первый запрос занимает около 50 мс или более, а второй - около 100 мс или более.
Я использую объединенный полнотекстовый индекс для columnA и columnB и полнотекстовый индекс для colA.Я также загружаю эти индексы в кеш.
Есть ли способ заставить эти запросы работать быстрее?
Я пробовал запускать их на машинах с более высокой загрузкой процессора / памяти, но это не имело большого значения.
Я также пытался использовать Sphinx;он работает быстрее, но не дает таких же качественных результатов.