Как хранить строки для оптимизации поиска

У меня есть таблица, содержащая столбец типа VARCHAR. Я хочу искать строки внутри столбца в соответствии с запросом пользователя. Я хочу реализовать приблизительный поиск. И моя таблица содержит Lacs записей. Я думаю, что есть несколько способов реализовать поиск.

  1. Загрузите все записи в C # и примените к ним алгоритм поиска. (Но это будет занимать слишком много памяти.)

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

Я уверен, что будет какой-то другой механизм для реализации этой функции или какой-то метод хранения данных, чтобы я мог быстрее искать их.

Может ли кто-нибудь дать мне лучшую идею, чтобы реализовать это?


person Rumit Parakhiya    schedule 09.08.2011    source источник
comment
Похоже, вам нужно изучить полнотекстовый поиск: msdn.microsoft.com/ en-us / library / ms142571.aspx   -  person Tao    schedule 09.08.2011
comment
Если вы пишете функцию базы данных, вы можете использовать эту функцию в своем SQL. В настоящее время в большинстве баз данных есть языки, способные кодировать нечеткий поиск.   -  person Marino Šimić    schedule 09.08.2011
comment
@Tao: Почему бы тебе не превратить этот комментарий в ответ? Скорее всего, вы получите за это репутацию.   -  person LukeH    schedule 09.08.2011
comment
@LukeH: честно, я не хотел тратить время на то, чтобы написать правильный ответ, но, думаю, я случайно забрал ответ в своем комментарии.   -  person Tao    schedule 09.08.2011
comment
Хм, я предположил, что SQL Server, но я просто понял, что это не указано; @Coder, ты можешь подтвердить / пометить тегом?   -  person Tao    schedule 09.08.2011
comment
@Tao: да, я пытаюсь реализовать это только на сервере SQL. И спасибо за размещение ссылки. Это действительно интересно. Я постараюсь использовать его, если он может ...   -  person Rumit Parakhiya    schedule 10.08.2011


Ответы (2)


Lucene - один из лучших способов поиска. Вы все еще можете сохранить свою строку в базе данных, но построить из нее индекс Lucene, а затем использовать его для поиска.

person Petar Ivanov    schedule 09.08.2011
comment
Было бы неплохо указать, как это можно сделать, этот вопрос, похоже, связан с учебником / обзором: stackoverflow.com/questions/37059/lucene-net-and-sql-server/ - person Tao; 09.08.2011
comment
@Tao: Спасибо за ссылку, Тао, действительно хороший учебник. - person Rumit Parakhiya; 10.08.2011

В SQL Server есть встроенная функция, позволяющая делать именно то, что вы хотите, - это полнотекстовый поиск.

Обзор от Microsoft здесь: http://msdn.microsoft.com/en-us/library/ms142571.aspx

Общая концепция заключается в том, что вы сообщаете SQL Server, какие таблицы / столбцы содержат доступный для поиска текст, и он создает полнотекстовые индексы, занимающие мало места и эффективно выполняющие запросы; эти индексы создаются асинхронно (так что ваши обновления / вставки не замедляются), и, начиная с SQL Server 2005, они хранятся в вашей базе данных (например, в резервных копиях), поэтому ими легко управлять.

Когда вы хотите выполнить поиск, язык запроса отличается от "обычного" сопоставления текста.

Полнотекстовый поиск доступен даже в бесплатной редакции «SQL Server 2008 Express with Advanced Services», поэтому стоимость больше не является проблемой.

person Tao    schedule 09.08.2011