Какой лучший способ реализовать поиск? - PullRequest
1 голос
/ 09 ноября 2009

У меня есть требование, когда пользователь вводит несколько терминов в поле поиска и нажимает кнопку «перейти». Есть ли у кого-нибудь хорошие ресурсы для реализации динамического поиска, охватывающего несколько таблиц базы данных?

Спасибо, Mike

Ответы [ 5 ]

6 голосов
/ 09 ноября 2009

Я проголосую за Lucene . Хотя SQL Server обеспечивает полнотекстовое индексирование и некоторые возможности поиска, он не является лучшей поисковой системой. По моему опыту, он не дает лучших результатов или ранжирования результатов, пока у вас не будет значительного объема проиндексированных элементов (минимум от десятков тысяч до сотен тысяч).

Напротив, Lucene явно является поисковой системой. Это перевернутый индекс, ведущий себя так же, как и ваш обычный поисковый движок в Интернете. Lucene предоставляет очень богатую платформу для индексирования и поиска, а также некоторые богатые C # и .NET API для запросов к индексам. Существует даже поставщик LINQ to Lucene, который позволит вам запрашивать индекс Lucene с помощью LINQ.

Единственным недостатком использования Lucene является то, что вам нужно создать индекс, который является побочным процессом, который выполняется независимо от базы данных. Вы также должны написать свой собственный инструмент для управления индексом. Ваш поисковый индекс, в зависимости от того, как часто вы его обновляете, может не обновляться на 100%. Как правило, это не является серьезной проблемой, но если у вас есть ресурсы, то индекс Lucene должен постепенно обновляться каждые несколько минут, чтобы все оставалось «свежим».

3 голосов
/ 09 ноября 2009

Это довольно загруженный вопрос, учитывая отсутствие деталей. Если вам просто нужен простой поиск по нескольким таблицам / столбцам, то вам может быть достаточно одного (грязного) поискового SP.

Тем не менее, если вам нужны дополнительные функции, такие как:

  • Поиск большого набора таблиц
  • Поддержка больших объемов данных
  • Поиск по формам слова
  • Логические операции
  • и т.д.

тогда вы можете захотеть взглянуть на полнотекстовый поиск (который является частью MS Sql 2000 и выше). Первоначальные инвестиции для ускорения работы с полнотекстовым поиском могут быть немного смещены, но по сравнению с реализацией вышеуказанных функций вы, вероятно, сэкономите массу времени и энергии.

Вот несколько ссылок для полнотекстового поиска, с которых можно начать:

Надеюсь, это поможет.

3 голосов
/ 09 ноября 2009

Называется Full-text Search.

http://msdn.microsoft.com/en-us/library/ms142571.aspx

1 голос
/ 10 ноября 2009

Хорошо, было несколько запросов на дополнительную информацию, поэтому позвольте мне предоставить некоторые. У меня есть несколько таблиц (например, пользователи, компании, адреса), и я бы хотел, чтобы пользователь мог ввести что-то вроде этого:

"Microsoft Wa Gates"

и вызовите список результатов, содержащий результаты для "gates", "microsoft" и "washington".

Кажется, что Lucene может быть довольно крутым.

0 голосов
/ 09 ноября 2009

Вы можете создать SP, который будет принимать условия поиска в качестве параметров и перенастраивать некоторые "наборы" (наборы записей) для запущенной программы. Он может возвращать выбор для каждой таблицы, и вы можете делать все, что вам нужно, с данными в коде вашего приложения.

Если вам нужно получить только набор данных, вы можете создать представление, используя UNION таблиц, для объединения столбцов в общую схему, а затем отфильтровать представление таким же образом. В вашем приложении вы получите только набор данных со всей информацией, объединенной в представлении и отфильтрованной.

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