Microsoft Desktop Search - СОДЕРЖИТ не возвращает результаты на Windows Server 2008

Я пытаюсь найти на удаленном файловом ресурсе (под управлением 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 ответ

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

DECLARE @SearchWord nvarchar(30) = 'a'

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

ВЫБЕРИТЕ FileName

ОТ SystemIndex

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

Этот отрывок из TechNet содержит: см. TechNet

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

Встречаюсь с той же проблемой. После нескольких дней сервальных мучений я обнаружил этот код, который может работать в Windows Server 2008 R2:

AND CONTAINS('keyword')
->
and System.Search.AutoSummary like '%keyword%'
Другие вопросы по тегам