Доступ к индексу поиска Windows с помощью ASP.NET MVC - PullRequest
2 голосов
/ 12 июля 2010

Я работаю над проектом, который обновляется с vbscript до ASP.NET MVC. Он использовал Microsoft Index Server для индексирования файлов Word и PDF на компьютере с Windows Server 2003. Он просто открыл OleDbConnection, используя строку подключения, например "Provider = \" MSIDXS \ "; Источник данных = \" docSearch \ ";".

Немного изучив, я узнал, что Index Server устарел («Примечание. Служба индексирования устарела с Windows XP. Вместо этого используйте поиск Windows.» - http://msdn.microsoft.com/en-us/library/ms690580), а Windows Search является преемником.
Итак, в моем новом приложении MVC я пытаюсь подключиться с помощью OleDbConnection со строкой подключения, такой как "Provider = Search.CollatorDSO; Расширенные свойства = \" Приложение = Windows \ "".

У меня есть метод, который принимает отформатированный запрос и выполняет поиск - вот запрос, который выполняется с использованием OleDb:

string.Format("SELECT System.FileName FROM SystemIndex WHERE CONTAINS('{0}')", query)

Теперь, когда я вызываю мой метод в тестовом классе, он работает нормально (то есть возвращает результаты ... myDataReader.HasRows имеет значение true). Но когда я вызываю тот же метод из моего контроллера MVC, он не возвращает результатов - myDataReader.HasRows - false - используя тот же запрос. Я думаю, что это связано с разрешениями и IIS не может получить доступ к индексу. Как я могу получить IIS доступ к индексу? Как я могу открыть индекс для веб-страницы ASP.NET? Если Index Server устарел и эта функция не поддерживается в Windows Search, что я должен использовать?

Ответы [ 2 ]

2 голосов
/ 12 июля 2010

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

Я бы получил строку подключения от ISearchQueryHelper

Имеет ли служба правильные разрешения? Вы проверяли Windows Search 3.0 / 4.0 SDK ?

Вижу, вы на форуме (http://social.msdn.microsoft.com/Forums/en-US/windowsdesktopsearchdevelopment/thread/7b9eead4-d938-42c6-ba2b-2c238a7706f9)

Я не уверен, Поиск Windows действительно может заменить Служба индексирования для веб-сайтов. Например, существует только один индекс с именем «SystemIndex», который содержит все в локальной системе. Поэтому, как бы вы ограничили результаты только веб-сайтом?

Полагаю, вам нужно использовать «поисковый сервер предприятия» или «поисковый сервер», с которым у меня нет опыта.

Поскольку результаты для Служба индексирования и Поиск Windows равны ADO.NET , представление не сильно меняется. API настолько отличается, что вам нужно будет внести множество изменений. Например, в Windows Search отсутствует «область действия». Когда я переключился на свое личное приложение «поиск на рабочем столе», потребовался час, чтобы внести изменения, но два дня, чтобы дублировать все функции, которые у меня были с Indexing Service из-за изменений API. Я сделал это изменение, потому что Поиск Windows лучше при поиске фрагментов кода в моей "Библиотеке кодов"

Для стандартных запросов без регулярных выражений, подстановочных знаков или нестандартных свойств оба выполняются одинаково. Служба индексирования всегда извлекает данные быстрее, но может не выполнять некоторые «слишком дорогие» запросы. Поиск Windows получение данных может занять много времени в зависимости от запроса. Как правило, эти «длинные запросы» являются «слишком дорогими» запросами Indexing Service . «Длинные запросы» также могут быть результатом любого запроса, который извлекает свойство, которое не содержится в индексе.

Я все еще использую Служба индексирования для своих веб-сайтов на Windows Server 2003 и не планирую вносить какие-либо изменения, потому что это не так просто, как я ожидал, и нет веская причина для этого.

1 голос
/ 12 июля 2010

Я нашел свой ответ здесь ASP.NET OLEDB разрывается при развертывании на IIS7 . Олицетворяя пользователя, который имеет доступ к индексу.

...