Лучший способ создать поиск на основе Soundex - PullRequest
0 голосов
/ 12 апреля 2011

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

Какой из этих дизайнов будет работать лучше?Предположим, что база данных содержит 500 000 записей, и поиск часто используется.В идеале мне бы хотелось, чтобы он просматривал каждую запись.

Design One

Вдоль каждой записи на форуме я храню soundex_post, который содержит все данные soundex.Когда поиск выполняется, он озвучивает все поисковые термины и выполняет операцию LIKE над полями soundex.

Design Two

Я нормализую его.Каждый код soundex хранится в новой таблице tblSoundexCodes.Тогда есть таблица tblForumPostSoundexCodes:

ID |Post_ID |SoundexCode_ID |Count

Затем, когда ищется soundex, я просто извлекаю все Post_ID, где SoundexCode_ID = n

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

Ответы [ 2 ]

1 голос
/ 12 апреля 2011

У меня есть некоторые сомнения по поводу вашей идеи.

Давайте возьмем ваш собственный ответ на один из комментариев:

"@ Фрэнк - MSSQL, вероятно, будет только экспресс-версия, и яиспользовал soundex в качестве примера, я, вероятно, буду реализовывать более современный алгоритм "

В этом простом комментарии 15 слов (я отбросил те, которые короче 4 символов).Таким образом, у вас будет потенциально 15 различных записей, указывающих здесь со значением "1".

Что если я, не являющийся носителем английского языка, решу поискать ("esample" и"dait«)?Будете ли вы предлагать возможность поиска более одного слова?С а-?или же-?не -?

Не лучше ли запустить поиск «как есть» и указать «возможно, вы ищете« Пример и дата »?»как гугл или википедия делают?

1 голос
/ 12 апреля 2011

Дизайн Два лучше.

Дизайн два не будет быстрее.Хранилище данных будет более компактным, и вам придется обновлять или вставлять строку в tblForumPostSoundexCodes, а также вставлять строку в tblSoundexCodes, когда кто-то пишет или обновляет сообщение.что эта обработка транзакции soundex происходит для каждого изменения поста (создание, обновление, удаление).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...