Лучший способ получить более точные результаты в MySQL - PullRequest
0 голосов
/ 18 марта 2020

Я столкнулся с дилеммой в среде разработки. Это структура из трех таблиц:

  1. Содержимое таблицы (статьи, новости ...)
  2. Теги таблицы (теги для каждой статьи и записи новостей)
  3. Пропуск таблицы Слова (слова типа "for", "get", "to" ...)

Основная идея - получить записи содержимого в соответствии с текстовым поиском. Как?

Сначала , удаляя слова из текстового поиска в соответствии с таблицей Skip Words , а затем сопоставляя остальные слова с таблицей тегов. Тем не менее, я хотел бы дать «более умный» результат, как

второй шаг, я хотел бы сначала получить статьи, которые соответствуют всем оставшимся словам текста поиск. Эти записи будут основной печатью.

Третий шаг , если нет подходящих записей со всеми словами текстового поиска, тогда начните искать записи, которые соответствуют меньшему количеству слов и сохраните подсчитать их и т. д., пока я не получу список записей контента.

На шаге last отображаются записи, упорядоченные в соответствии с количеством совпадений слов. Итак, рассматривая этот процесс, я подумал:

  1. Временная таблица для загрузки данных из всех упомянутых шагов
  2. Использование одной хранимой процедуры со всеми необходимыми логами c

Выше приведено сравнение тегов с использованием условий «Мне нравится» (and field like "word1%" and field like "word2%")

Однако меня беспокоит производительность. Это будет процесс на главной странице веб-сайта, который имеет более 1700 посещений в час. Я был бы признателен, если бы вы могли объяснить свой опыт такого рода процессов (если они были)? или какой, по вашему мнению, лучший способ реализовать с учетом производительности?

1 Ответ

0 голосов
/ 22 марта 2020

Используйте индекс FULLTEXT. Он охватывает некоторые идеи, которые вы пытаетесь изобрести заново. 1700 / час не будет проблемой.

WHERE MATCH(col) AGAINST('join*' IN BOOLEAN MODE)

соответствует объединению / присоединению / объединению и объединению.

...