No en el espíritu de la indización de texto completo al parecer.
palabra
es una cadena de caracteres sin espacios o puntuacion .
frase
es una o más palabras con espacios entre cada palabra .
Y
Puntuacion se ignora. Por lo tanto, CONTAINS (prueba, "falla de la computadora") coincide con una fila con el valor "Donde es mi computadora? No encontrarlo sería costoso".
No estoy seguro de cuáles son sus opciones.
Obviamente LIKE
funciona bien:
SELECT *
FROM dbo.stackoverflow_319730
WHERE txtcol LIKE 'arg[ [ ]0]'
Pero
SELECT *
FROM dbo.stackoverflow_319730
WHERE CONTAINS(txtcol, '"arg[0]"')
Incluso coincide con una columna con 'arg[1]'
en ella, por ejemplo:
CREATE TABLE [dbo].[stackoverflow_319730](
[id] [int] IDENTITY(1,1) NOT NULL,
[txtcol] [text] NOT NULL,
CONSTRAINT [PK_stackoverflow_319730] PRIMARY KEY CLUSTERED
(
[id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
INSERT INTO [dbo].[stackoverflow_319730] (txtcol) VALUES ('arg[0]')
INSERT INTO [dbo].[stackoverflow_319730] (txtcol) VALUES ('arg[1]')
INSERT INTO [dbo].[stackoverflow_319730] (txtcol) VALUES ('some other text')
INSERT INTO [dbo].[stackoverflow_319730] (txtcol) VALUES ('arg[0], arg[1]')
EXEC sp_fulltext_catalog 'FTCatalog','create'
EXEC sp_fulltext_table 'stackoverflow_319730', 'create', 'FTCatalog', 'pk_stackoverflow_319730'
EXEC sp_fulltext_column 'stackoverflow_319730', 'txtcol', 'add'
EXEC sp_fulltext_table 'stackoverflow_319730','activate'
EXEC sp_fulltext_catalog 'FTCatalog', 'start_full'
SELECT *
FROM dbo.stackoverflow_319730
WHERE txtcol LIKE 'arg[ [ ]0]'
SELECT *
FROM dbo.stackoverflow_319730
WHERE CONTAINS(txtcol, '"arg[0]"')
Con los resultados que hacen referencia al problema con puntuación:
id txtcol
----------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1 arg[0]
(1 row(s) affected)
id txtcol
----------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1 arg[0]
2 arg[1]
4 arg[0], arg[1]
Informational: The full-text search condition contained noise word(s).
esto es correcto, pero usted TIENE que escapar del corchete (o colocarlo en múltiples Y y OR cita separadas como se muestra) - incluir el corchete fuera de las cotizaciones genera un error. –
así que para ser 100% claro, esto funciona: 'CONTAINS (field, 'value AND" value [0] "')' pero esto no: 'CONTAINS (field, 'value" value [0] "')' . Debe incluir explícitamente las cláusulas booleanas –
SELECCIONAR * FROM dbo.stackoverflow_319730 WHERE CONTAINS (txtcol, '"arg [0]" Y "arg [1]"' aún coincide arg [0] solo en mis datos de prueba . –