No se puede usar un predicado de CONTENIDO o TEXTO LIBRE en una tabla o vista indexada porque no está indexado en texto completo


Estoy recibiendo el siguiente error en mi base de datos SQL server 2008 R2:

No puede usar un predicado CONTAINS o FREETEXT en la tabla o vista indexada 'tblArmy' porque no está indexado en texto completo.

Author: Alex Aza, 2011-05-14

6 answers

  1. Asegúrese de tener instalada la función de búsqueda de texto completo.

    Configuración de búsqueda de texto completo

  2. Crear catálogo de búsqueda de texto completo.

     use AdventureWorks
     create fulltext catalog FullTextCatalog as default
    
     select *
     from sys.fulltext_catalogs
    
  3. Crear índice de búsqueda de texto completo.

     create fulltext index on Production.ProductDescription(Description)
     key index PK_ProductDescription_ProductDescriptionID
    

    Antes de crear el índice, asegúrese de:
    -usted no tiene ya el índice de búsqueda de texto completo en la tabla como solo un índice de búsqueda de texto completo permitido en una tabla
    - existe un índice único en la tabla. El índice debe basarse en una columna de clave única, que hace no permitir NULL.
    - existe un catálogo de texto completo. Debe especificar explícitamente el nombre del catálogo de texto completo si no hay un catálogo de texto completo predeterminado.

Puede hacer los pasos 2 y 3 en SQL Sever Management Studio. En el explorador de objetos, haga clic con el botón derecho en una tabla, seleccione Full-Text index elemento de menú y luego Define Full-Text Index... elemento de submenú. El asistente de indexación de texto completo lo guiará a través del proceso. También creará un catálogo de búsqueda de texto completo para usted si no tiene ninguno aun.

introduzca la descripción de la imagen aquí

Puede encontrar más información en MSDN

 94
Author: Alex Aza,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-05-14 19:28:45

Una solución para CONTAINS: Si no desea crear un índice de texto completo en la columna, y el rendimiento no es una de sus prioridades, puede usar la instrucción LIKE que no necesita ninguna configuración previa:

Ejemplo: encuentra todos los productos que contienen la letra Q:

SELECT ID, ProductName
FROM [ProductsDB].[dbo].[Products]
WHERE [ProductsDB].[dbo].[Products].ProductName LIKE '%Q%'
 49
Author: Mohammad Sepahvand,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-11-04 10:05:46

Debe definir Full-Text-Index en todas las tablas de la base de datos donde necesite usar una consulta con CONTAINS que tomará algún tiempo.

En su lugar, simplemente use el LIKE que le dará resultados instantáneos sin la necesidad de ajustar ninguna configuración para las tablas.

Ejemplo:

SELECT * FROM ChartOfAccounts WHERE AccountName LIKE '%Tax%'

El mismo resultado obtenido con CONTAINS puede obtenerse con LIKE.

Ver el resultado: introduzca la descripción de la imagen aquí

 14
Author: Ashraf Abusada,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-09-04 13:13:42
 3
Author: mellamokb,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-05-14 16:40:41

Debe agregar índice de texto completo en los campos específicos que desea buscar.

ALTER TABLE news ADD FULLTEXT(headline, story);

Donde "news "es su tabla y" headline, story " campos que no habilitará para la búsqueda de texto completo

 1
Author: SimonQuest,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-05-14 16:50:31

Hay una solución más para establecer el texto completo de la columna en true.

Estas soluciones, por ejemplo, no funcionaron para mí

ALTER TABLE news ADD FULLTEXT(headline, story);

Mi solución.

  1. Haga clic derecho en la tabla
  2. Diseño
  3. Haga clic derecho en la columna que desea editar
  4. Índice de texto completo
  5. Añadir
  6. Cerrar
  7. Actualizar

PRÓXIMOS PASOS

  1. Haga clic derecho en la tabla
  2. Diseño
  3. haga Clic en la columna que desea editar
  4. El parte inferior de mssql que habrá pestaña "Propiedades de columna"
  5. Full-text Specification -> (Is Full-text Indexed) establecido en true.

Actualizar

Versión de mssql 2014

 1
Author: Icet,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-11 08:15:12