Какова стратегия для простого поиска по сайту в среде SQL Server 2008 и ASP.NET Среда MVC?

#asp.net #sql #sql-server-2008 #stored-procedures

#asp.net #sql #sql-server-2008 #хранимые процедуры

Вопрос:

Я пытаюсь разработать стратегию для реализации очень простого поиска по сайту в ASP.NET MVC и SQL Server 2008.

На самом деле, все, что я хочу сделать, это иметь возможность ранжировать результаты поиска на основе количества встречений поискового слова или фразы на веб-странице. Я попытался сделать это с помощью LinqToSql, но столкнулся со множеством проблем, когда некоторые команды LINQ не имеют эквивалента SQL. Это было несколько месяцев назад, поэтому я не помню конкретных ошибок.

Итак, я просто пытаюсь найти подход. Я имею в виду следующее:

Подход 1: вероятно, мне следует написать программу для разделения сайта и каким-либо образом проиндексировать текст сайта — я думаю, мне следует сохранить информацию в таблице типа:

  • ID
  • Word
  • URL

Затем я мог бы запросить это и ранжировать на основе того, сколько раз это слово ассоциировалось с определенным URL. Но потом я понял, что этот метод полностью выйдет из строя, если пользователь будет искать фразу.

Подход 2: Затем я поиграл с идеей использования SPROCs для создания временной таблицы с записью для каждого URL, которая каким-то образом проанализировала бы текст и определила, сколько раз фраза или слово появлялось в каждом отдельном URL. и затем мы бы вернули результаты из временной таблицы. Я думаю, что временная таблица будет выглядеть примерно так:

  • ID
  • searchText
  • URL
  • Частота

И затем select * from temptable order by Frequency asc или что-то в этом роде.

Однако я не уверен, способны ли SPROCs подобным образом анализировать текст или возможен ли одновременный поиск.

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

Есть мысли о том, как мне следует подойти к этой проблеме? Есть ли другой подход, который я должен рассмотреть?

Ответ №1:

Почему бы не использовать подстановочные знаки и операторы LIKE для вашей проблемы с сопоставлением фраз и слов?

 Select Count(*) from temptable where SearchPhrase LIKE  '%Apple%' 
  

Комментарии:

1. Проблема, которую я предвижу, заключается в том, как SearchPhrase заполнить временную таблицу в первую очередь. Мне нужен какой-то способ подсчета экземпляров SearchPhrase в каждом nvarchar(XX) поле. Я не уверен, что SQL может анализировать текст подобным образом. Я чувствую, что возникает новый вопрос SO 🙂

Ответ №2:

Возможно, это не совсем то, что вы хотите, но Windows SharePoint Search Server не так уж плох.

Да, в нем есть слово «SharePoint», которое обычно заставляет меня схватить ножницы на моем столе и начать выколачивать глаза, но, использовав его один раз в крайнем случае, я был на самом деле несколько впечатлен.

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

Ответ №3:

После небольшого изучения, похоже, что полнотекстовый поиск SQL Server 2008 — это то, что я хотел бы использовать. Я пока не уверен на 100%, но это выглядит многообещающе.

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

Ответ №4:

Если вы рассматриваете полнотекстовый поиск, то также ознакомьтесь сlucene.net.

Я использовал FTS для одного проекта, а позже использовал lucene.net для другого, и хотя требования отличались от ваших, я бы никогда не вернулся к FTS сейчас.