Я пытаюсь реализовать функцию поиска для доступного в автономном режиме StackOverflow и замечаю некоторые проблемы с использованием индексации FULLTEXT в MySQL.
В частности, по умолчанию индексирование FULLTEXT ограничено словами длиной от 4 до 84 символов. Такие термины, как «PHP» или «SQL» не будут соответствовать минимальной длине, и поиск этих терминов не даст результатов.
Можно изменить переменную, которая управляет минимальной длиной слова, которое должно быть проиндексировано (ft_min_word_len), но это общесистемное изменение, требующее перестроения индексов во всех базах данных. На случай, если другие найдут это приложение полезным, я бы предпочел, чтобы такие переменные были как можно более ванильными. На днях я обнаружил на этом сайте сообщение о том, что изменение этого значения в любом случае просто плохая идея.
Другая проблема связана с такими терминами, как «VB.NET», где, насколько я могу судить, период в середине термина разделяет его на два индексированных значения - VB и NET. Опять же, это означает, что поиск "VB.NET" ничего не даст.
Наконец, поскольку я делаю прямой дамп ежемесячных дампов на основе XML, все значения преобразуются в HTML-объекты, и я обеспокоен тем, что это может повлиять на мои результаты поиска.
Я нашел сообщение в блоге , в котором предпринимаются следующие действия:
- сохраните две копии ваших данных - одну с разметкой и т. Д. Для отображения, а другую - для поиска (удаления ненужных слов, разметки и т. Д.)
- вставляет короткие термины, чтобы они были проиндексированы, я полагаю, с префиксом / суффиксом.
То, что я хотел бы знать, это действительно ли лучшие обходные пути для этих проблем? Кажется, что полудублирование таблицы размером> 1 ГБ расточительно, но, возможно, это только я.
Кроме того, если бы кто-нибудь мог порекомендовать хороший сайт для понимания индексации FULLTEXT в MySQL, я был бы признателен. Чтобы этот вопрос не был слишком загроможден, пожалуйста, оставьте рекомендации сайта в комментариях к вопросу или напишите мне прямо на сайт в моем профиле пользователя).
Спасибо!
<ч />
Дополнительная информация:
Я думаю, что я должен уточнить пару вещей.
Я знаю, что "MySQL" ведет к предположению о "веб-приложении", но я здесь не к этому стремлюсь. Я мог бы установить Apache и PHP и запускать вещи таким образом, но я стараюсь держать это под контролем. Я могу использовать свой веб-сайт для игры с PHP, поэтому я не чувствую необходимости устанавливать его и на свой домашний компьютер. Я также надеюсь, что это может быть полезно и для других, и я не хочу заставлять кого-либо еще устанавливать кучу дополнительных утилит. Я пошел с MySQL, так как это было легко, и необходимость установки какой-либо БД была неизбежна.
Специфика проекта должна была быть:
- Настольное приложение, написанное на C # (WinForms)
- Бэкэнд MySQL
Я начинаю задаваться вопросом, должен ли я просто сказать ему об этом и установить все, что мне нужно, чтобы сделать это (автономное) веб-приложение. Как бы нам ни хотелось думать, что наш любимый проект будет использоваться и любимым сообществом в целом, я должен знать, что в конечном итоге его может использовать только один пользователь.