Лучший способ построить функцию поиска - PullRequest
4 голосов
/ 16 января 2009

У меня есть веб-сайт, на котором более 400 000 товаров. Некоторые похожи, некоторые сильно отличаются. Мы хотим предоставить способ поиска этих предметов наилучшим образом. После доставки на сайт он использовал полнотекстовую индексацию. Решение в лучшем случае базовое, в худшем - неадекватное.

Так каков наилучший способ поиска этих предметов? Они хранятся в базе данных SQL Server (2005). Наш сайт разработан на C # 2.0.

В настоящее время здесь идет процесс:

  1. Пользователь вводит значение в текстовое поле.
  2. Мы «чистим» эту запись. Удаление «страшных» персонажей, которые могут быть попыткой взлома. Удалить ключевые слова (и, или, и т.д ..)
  3. Передать значение в хранимую процедуру для возврата результатов.
  4. Вернуть результаты.

Ответы [ 5 ]

7 голосов
/ 16 января 2009

Посмотрите на Lucene.NET . Я думаю, что это значительное улучшение по сравнению с полнотекстовым поиском в SQL Server.

2 голосов
/ 16 января 2009

В SQL Server Central есть хорошая статья о создании Google-подобного полнотекстового поиска с использованием SQL Server. К сожалению, вы должны зарегистрироваться, чтобы просмотреть всю статью, но регистрация бесплатна, и они публикуют много полезной информации. Вот ссылка:

http://www.sqlservercentral.com/articles/Full-Text+Search+(2008)/64248/

Выдержка:

...

Google Style

Ключ к успешному применению сделать его простым в использовании, но мощным. Google сделал это с помощью своей сети поисковый движок. Синтаксис для запросов прост и интуитивно понятен, но полнофункциональный. Хотя основной строительные блоки запроса Google просто вы можете объединить их в мощные способы. Я начну с основных Синтаксис запроса Google и добавить некоторые дополнительные операторы, чтобы воспользоваться Сила SQL Server СОДЕРЖИТ синтаксис предиката. Полный гугл синтаксис определен в гугле Помощь: Шпаргалка на http://www.google.com/help/cheatsheet.html.

...

Статья содержит полный пример кода и даже ссылку для его загрузки. Это интересное чтение, даже если вы не планируете его реализовывать.

1 голос
/ 16 января 2009

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

1 голос
/ 16 января 2009

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

Исходя из http://incubator.apache.org/lucene.net/

Lucene.Net является исходным кодом, класс-на-класс, API-на-API и алгоритмический порт Java Lucene поисковая система для C # и .NET платформа с использованием Microsoft .NET Фреймворк.

Lucene.Net придерживается API и классы, используемые в оригинальной Java реализация Lucene. API имена, а также имена классов сохраняется с намерением дать Lucene.Net внешний вид C # язык и .NET Framework. За Например, метод Hits.length () в реализация Java теперь читает Hits.Length () в порту C #.

В дополнение к API и классам порт на C #, алгоритм Java Lucene портирован на C # Lucene. это означает индекс, созданный с помощью Java Lucene совместим с предыдущими версиями с C # Lucene; как при чтении, написание и обновление. На самом деле Lucene Индекс можно искать одновременно и обновляется с помощью Java Lucene и C # Люценовые процессы.

0 голосов
/ 16 января 2009

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

Вот одна особенность, которую я хочу увидеть здесь, в StackOverflow, а также на любом другом сайте, который предоставляет функции поиска:

  • уделите больше внимания (веса) некоторым полям ваших документов (в случае переполнения стека - поиск должен располагать по приоритетам заголовок темы)

Также рассмотрите возможность использования сторонних решений для FTS, таких как Lucene или Sphinx - они могут обеспечить гораздо лучший пользовательский опыт, чем встроенные функции. Некоторые преимущества сторонних компонентов FTS: уменьшенная загрузка базы данных, лучшая релевантность результатов поиска, лучшая скорость индексации, меньший размер базы данных.

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