index - full text search sql server 2017
No se puede usar un predicado CONTAINS o FREETEXT en la tabla o vista indizada porque no está indexado en texto completo (6)
Recibo un error de seguimiento en mi base de datos de SQL Server 2008 R2:
No se puede usar un predicado
CONTAINS
oFREETEXT
en la tabla o en la vista indizada ''tblArmy'' porque no está indexado en texto completo.
Asegúrese de tener instalada la función de búsqueda de texto completo.
Crear un catálogo de búsqueda de texto completo.
use AdventureWorks create fulltext catalog FullTextCatalog as default select * from sys.fulltext_catalogs
Crear un í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 que:
- todavía no tiene un índice de búsqueda de texto completo en la tabla, ya que solo un índice de búsqueda de texto completo está permitido en una tabla
- existe un índice único en la tabla. El índice debe basarse en la columna de clave única, que no permite NULL.
- existe un catálogo de texto completo. Debe especificar el nombre del catálogo de texto completo explícitamente 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 el elemento de menú de Full-Text index
y luego, seleccione el elemento del menú secundario Define Full-Text Index...
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 aún no tiene ninguno.
Puede encontrar más información en MSDN
Debe definir el Full-Text-Index
en todas las tablas de la base de datos donde necesite usar una consulta con CONTAINS
que llevará algún tiempo.
En su lugar, simplemente use 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
se puede obtener con LIKE
.
Es posible que deba habilitar la tabla para la indexación de texto completo .
Hay una solución más para establecer la columna Texto completo en verdadero.
Estas soluciones, por ejemplo, no funcionaron para mí
ALTER TABLE news ADD FULLTEXT(headline, story);
Mi solución.
- Haga clic derecho sobre la mesa
- Diseño
- Haga clic con el botón derecho en la columna que desea editar
- Índice de texto completo
- Añadir
- Cerca
- Refrescar
PRÓXIMOS PASOS
- Haga clic derecho sobre la mesa
- Diseño
- Haga clic en la columna que desea editar
- En la parte inferior de mssql habrá una pestaña "Propiedades de columna"
- Especificación de texto completo -> (está indexado en texto completo) en verdadero.
Refrescar
Versión de mssql 2014
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, podría usar la declaración LIKE
que no necesita ninguna configuración previa:
Ejemplo: encuentre todos los Productos que contengan la letra Q:
SELECT ID, ProductName
FROM [ProductsDB].[dbo].[Products]
WHERE [ProductsDB].[dbo].[Products].ProductName LIKE ''%Q%''
tiene que agregar el índice de texto completo en los campos específicos que desea buscar.
ALTER TABLE news ADD FULLTEXT(headline, story);
donde "noticias" son los campos de su tabla y "título, historia" que no habilitará para la búsqueda de texto completo