#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%, но это выглядит многообещающе.
Ответ №4:
Если вы рассматриваете полнотекстовый поиск, то также ознакомьтесь сlucene.net.
Я использовал FTS для одного проекта, а позже использовал lucene.net для другого, и хотя требования отличались от ваших, я бы никогда не вернулся к FTS сейчас.