Microsoft Desktop Search - СОДЕРЖИТ не возвращает результаты на Windows Server 2008 - PullRequest
3 голосов
/ 12 января 2012

Я пытаюсь найти удаленный файловый ресурс (работает под управлением Windows Server 2008 R2) для файлов, которые содержат текст. Если я попробую это, все будет работать нормально:

SELECT System.FileName
FROM RemoteServer.SystemIndex 
WHERE SCOPE='file://RemoteServer/FileShare'

и я получаю много результатов. Но как только я пытаюсь найти какой-то текст, я не получаю результатов:

SELECT System.FileName
FROM RemoteServer.SystemIndex 
WHERE SCOPE='file://RemoteServer/FileShare'
AND CONTAINS('a')

если я попробую его на моем компьютере (Windows 7), он будет работать нормально:

SELECT FileName
FROM SystemIndex 
WHERE CONTAINS('a')

Вот мой код на C #, который я использую для поиска:

string connectionString = "Provider=Search.CollatorDSO;Extended Properties=\"Application=Windows\"";
using (OleDbConnection myOleDbConnection  = new OleDbConnection(connectionString))
{
    myOleDbConnection.Open();
    using (OleDbCommand myOleDbCommand  = new OleDbCommand(sql, myOleDbConnection))
    {
        using (myDataReader = myOleDbCommand.ExecuteReader())
        {
            if (!myDataReader.HasRows)
            {
                System.Console.WriteLine("Query returned 0 rows!");
            }
            else
            {
                // Process results here
            }
        }
    }
}

Я пробовал следующее:

  • Перестроен индекс
  • Проверено, что папка "FileShare" была добавлена ​​на сервере для индексации
  • Проверено на вкладке «Типы файлов», что отмечены правильные расширения и что для этих расширений выбраны «Свойства индекса и содержимое файла»
  • Перезапущена служба индексирования
  • Перезапустил сам сервер

безрезультатно.

Есть еще предложения? Разочаровывает, так как я на 99% пути туда. Весь этот поиск на рабочем столе Windows кажется довольно неподдерживаемым, может, мне стоит его скопировать и использовать что-нибудь еще?

1 Ответ

2 голосов
/ 05 ноября 2013

Попробуйте объявить переменную nvarchar для поискового слова

DECLARE @SearchWord nvarchar (30) = 'a'

Затем измените свой код на:

ВЫБРАТЬ Имя файла

ИЗ SystemIndex

ГДЕ СОДЕРЖИТСЯ (@SearchWord)

Эта выдержка взята из TechNet на СОДЕРЖАНИЕ См. TechNet

* содержит_поиск_условие * - это nvarchar.Неявное преобразование происходит, когда в качестве входных данных используется другой символьный тип данных.В следующем примере переменная @SearchWord, которая определена как varchar (30), вызывает неявное преобразование в предикате CONTAINS.

...