sql-server-2008-r2 oledb windows-search indexing-service

Búsqueda de texto completo mediante el servicio de búsqueda de Windows y SQL Server 2008 R2



sql-server-2008-r2 oledb (1)

Have a look at this code..It may help USE [YourDB] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO Create PROC [dbo].[SearchAllTables] @SearchStr nvarchar(100) AS BEGIN DECLARE @dml nvarchar(max) = N'''' IF OBJECT_ID(''tempdb.dbo.#Results'') IS NOT NULL DROP TABLE dbo.#Results CREATE TABLE dbo.#Results ([tablename] nvarchar(100), [ColumnName] nvarchar(100), [Value] nvarchar(max)) SELECT @dml += '' SELECT '''''' + s.name + ''.'' + t.name + '''''' AS [tablename], '''''' + c.name + '''''' AS [ColumnName], CAST('' + QUOTENAME(c.name) + '' AS nvarchar(max)) AS [Value] FROM '' + QUOTENAME(s.name) + ''.'' + QUOTENAME(t.name) + '' (NOLOCK) WHERE CAST('' + QUOTENAME(c.name) + '' AS nvarchar(max)) LIKE '' + ''''''%'' + @SearchStr + ''%'''''' FROM sys.schemas s JOIN sys.tables t ON s.schema_id = t.schema_id JOIN sys.columns c ON t.object_id = c.object_id JOIN sys.types ty ON c.system_type_id = ty.system_type_id AND c .user_type_id = ty .user_type_id WHERE t.is_ms_shipped = 0 AND ty.name NOT IN (''timestamp'', ''image'', ''sql_variant'') INSERT dbo.#Results EXEC sp_executesql @dml SELECT * FROM dbo.#Results END

Actualmente estoy intentando consultar el servicio de búsqueda de Windows desde una instancia de SQL Server 2008 R2 (también probado en SQL Server 2012). La búsqueda de Windows se expone como una fuente de datos OLE DB, lo que me brinda varias opciones para consultar el índice de búsqueda. Al configurar un nuevo servidor vinculado en SQL Server, Management Studio me da la opción de seleccionar el Proveedor Microsoft OLE DB para la búsqueda, lo que implica que debería poder conectarme desde SQL Server. Sin embargo, resulta ser un reto poner esto en marcha. A continuación encontrará el mensaje de error que encontré.

El proveedor OLE DB "Search.CollatorDSO" para el servidor vinculado "TESTSERVER" devolvió el mensaje "El comando no se preparó".
Msg 7399, Nivel 16, Estado 1, Línea 2
El proveedor OLE DB "Search.CollatorDSO" para el servidor vinculado "TESTSERVER" informó un error. El comando no estaba preparado.
Msg 7350, Nivel 16, Estado 2, Línea 2
No se puede obtener la información de la columna del proveedor OLE DB "Search.CollatorDSO" para el servidor vinculado "TESTSERVER".

Las cosas se ponen aún más interesantes. Aunque la solución del servidor vinculado no funciona, puedo ajustar el código que consulta la búsqueda de Windows en una función CLR (usando MSDN: consultar el índice mediante programación ) y usarlo correctamente dentro de SQL Server. Sin embargo, esto es menos deseable, debido a los pasos necesarios para configurarlo (implementar la biblioteca, configurar permisos, etc.). He intentado varios ajustes de parámetros, sin suerte. También he intentado habilitar algunas de las opciones del proveedor Search.CollatorDSO, como permitir que se cree una instancia del proveedor como un servidor en proceso. Actualmente estoy usando la configuración de abajo. Por seguridad estoy usando el contexto de seguridad actual del inicio de sesión.

  • Proveedor: Proveedor Microsoft OLE DB Provider for Search
  • Fuente de datos: (local)
  • Cadena del proveedor: Provider=Search.CollatorDSO.1;EXTENDED?PROPERTIES="Application=Windows"
  • Ubicación: -

Además, necesito buscar unidades de red, ¿se puede hacer esto utilizando bibliotecas compartidas de Windows?

Soy consciente de que más personas han estado luchando con este problema en los últimos años. Me pregunto si alguien ha podido poner esto en funcionamiento o podría indicarme la dirección correcta.

OLEDB trabaja

Los componentes normales de ADO / OLEDB pueden consultar el servicio de búsqueda de Windows con la cadena de conexión:

provider=Search.CollatorDSO.1;EXTENDED PROPERTIES="Application=Windows"

Y una consulta de ejemplo:

SELECT TOP 100000 "System.ItemName", "System.ItemNameDisplay", "System.ItemType", "System.ItemTypeText", "System.Search.EntryID", "System.Search.GatherTime", "System.Search.HitCount", "System.Search.Store", "System.ItemUrl", "System.Filename", "System.FileExtension", "System.ItemFolderPathDisplay", "System.ItemPathDisplay", "System.DateModified", "System.ContentType", "System.ApplicationName", "System.KindText", "System.ParsingName", "System.SFGAOFlags", "System.Size", "System.ThumbnailCacheId" FROM "SystemIndex" WHERE CONTAINS(*,''"Contoso*"'',1033)

Puede intentar la consulta directamente en SQL Server en SQL Server Management Studio intentando ejecutar:

SELECT * FROM OPENROWSET( ''Search.CollatorDSO'', ''Application=Windows'', ''SELECT TOP 100 "System.ItemName", "System.FileName" FROM SystemIndex'');

Lo que da los errores:

OLE DB provider "Search.CollatorDSO" for linked server "(null)" returned message "Command was not prepared.". Msg 7399, Level 16, State 1, Line 1 The OLE DB provider "Search.CollatorDSO" for linked server "(null)" reported an error. Command was not prepared. Msg 7350, Level 16, State 2, Line 1 Cannot get the column information from OLE DB provider "Search.CollatorDSO" for linked server "(null)".

Lectura de bonos