MySql использовать INNODB_FT_INDEX_CACHE в производстве - PullRequest
0 голосов
/ 01 апреля 2020

В нашем приложении мы собираемся ввести тегирование для различных объектов. Я прочитал о возможных решениях и нашел эту серию сообщений в блоге:

Исходя из этого, я собираюсь ввести полнотекстовое индексирование для наших столбцов "тегов". Пока все хорошо (зная пределы полнотекстового индекса, такого как стоп-слова, разделители токенизации и т. Д. c).

Однако нам нужно иметь возможность перечислять существующие теги в некоторых случаях, и мы требуем, чтобы теги, определенные разными пользователями, скрыты друг от друга (в основном, если «пользователь A» определяет тег «закрытый», тогда «пользователь B» не должен его видеть).

Однако я нашел возможное решение, которое, похоже, работает Я не убежден. Вот что я сейчас делаю:

  • SET GLOBAL innodb_ft_aux_table='' с именем таблицы
  • run SELECT DISTINCT WORD tag, COUNT(1) cnt FROM INFORMATION_SCHEMA.INNODB_FT_INDEX_CACHE WHERE DOCID IN (?,?) GROUP BY tag ORDER BY cnt DESC (список DOCID предварительно фильтруется с разрешениями пользователя - набор результатов ожидается, что он будет меньше нескольких тысяч записей, в основном ниже 100)

Я также могу расширить часть WHERE выбора для фильтрации списка результатов (для целей автозаполнения). Но , так как этот подход использует глобальную переменную, его нельзя использовать в параллельной среде. Я могу применить какую-то синхронизацию, но я должен вообще использовать эту таблицу ? Кроме того, поскольку эта таблица относится к категории «мониторинг» в документации mysql, я не уверен, что это правильный вариант использования. Если нет, какие еще решения у меня есть с полнотекстовым индексом?

...