Каков наилучший способ реализации полнотекстового поиска для приложения ASP.NET MVC? - PullRequest
7 голосов
/ 29 сентября 2010

Я создал приложение ASP.NET MVC с MVC 2.0 и Fluent NHibernate (по некоторым причинам скрыто за репозиториями).Приложение представляет собой довольно сложный домен с несколькими различными объектами, такими как пользователи, сообщения, комментарии, файлы и встречи.

Теперь я хочу реализовать полнотекстовый поиск, который позволяет пользователю легко находить все типы контента, простоввод поисковой фразы.При обработке всех типов объектов в приложении по отдельности, теперь я должен собрать их «вместе» для поиска.Это означает, что пользователь не делает различий между различными типами, он просто вводит "xyz" и хочет получить результаты в списке, комментарии, смешанные с сообщениями и т. Д.

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

Так что я ищу альтернативное решение.В настоящее время я работаю с SQL Server 2008. Я нашел lucene.net (http://lucene.apache.org/lucene.net/),, но я еще не потратил много времени.

Есть предложения?

Ответы [ 3 ]

2 голосов
/ 29 сентября 2010

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

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

Вот несколько ресурсов для запуска с полным текстом SQL Server:

  1. http://msdn.microsoft.com/en-us/library/ms142571.aspx
  2. http://www.dotnetfunda.com/articles/article1019-implementing-fulltext-search-on-view-.aspx?sms_ss=dotnetshoutout
2 голосов
/ 29 сентября 2010

Для .Net вы можете заглянуть в RavenDB , который использует lucene в качестве хранилища индексов и предоставит вам возможности поиска Lucene в качестве бонуса.Это может быть проще в использовании.Конечно, более гибкий и лучший API-интерфейс.Но вы должны обратить внимание на издержки хранения.

В зависимости от ваших потребностей вы можете включить Полнотекстовый поиск в SQL Server, который дает вам дополнительные возможности запросов из SQL.Таким образом, вам не нужно управлять другим индексом за пределами данных вашей базы данных.Если ваши данные находятся в нескольких репозиториях, то лучше использовать внешний индекс, такой как Lucene.

Что касается других полнотекстовых поисковых систем, у вас есть Microsoft Search Server Express , но вы можетенеобходимо создать собственный контент-коннектор для ввода данных (опять же, в зависимости от ваших репозиториев).

0 голосов
/ 02 октября 2010

Просто сказать «использовать полный текст» недостаточно. Его решение не обязательно заключается в более сложном поиске текста внутри каждого типа сущности. Он должен иметь возможность запрашивать индекс для любого типа объекта на основе строки запроса. Я мог видеть использование NHibernate.Search в качестве метода для заполнения индекса Lucene, но не знаю, поддерживают ли его возможности поиск в индексе независимо от типа документа индекса (сохраняется класс NHibernate). Поэтому вам, возможно, придется запросить индекс Lucene более напрямую и интерпретировать результаты для отображения или прямого извлечения базового объекта в БД SQL-сервера через сам NHibernate.

...