En primer lugar, es necesario habilitado búsqueda de texto completo de indexación en los servidores de producción, por lo que si no está dentro del alcance, no querrá ir con esto.
Sin embargo, si eso ya está listo, la búsqueda de texto completo es relativamente simple.
T-SQL tiene 4 predicados utilizados para la búsqueda de texto completo:
- FREETEXT
- FREETEXTTABLE
- CONTIENE
- CONTAINSTABLE
FREETEXT es el más simple, y se puede hacer como este:
SELECT UserName
FROM Tbl_Users
WHERE FREETEXT (UserName, 'bob')
Results:
JimBob
Little Bobby Tables
FREETEXTTABLE funciona igual que FreeTEXT, excepto que devuelve los resultados como una tabla.
El poder real de búsqueda de texto completo de T-SQL proviene de la CONTIENE (y CONTAINSTABLE) predicado ... Éste es enorme, así que voy a pegar su uso en:
CONTAINS
({ column | * } , '<contains_search_condition>'
)
<contains_search_condition> ::=
{ <simple_term>
| <prefix_term>
| <generation_term>
| <proximity_term>
| <weighted_term>
}
| { (<contains_search_condition>)
{ AND | AND NOT | OR } <contains_search_condition> [ ...n ]
}
<simple_term> ::=
word | " phrase "
< prefix term > ::=
{ "word * " | "phrase * " }
<generation_term> ::=
FORMSOF (INFLECTIONAL , <simple_term> [ ,...n ])
<proximity_term> ::=
{ <simple_term> | <prefix_term> }
{ { NEAR | ~ } { <simple_term> | <prefix_term> } } [ ...n ]
<weighted_term> ::=
ISABOUT
({ {
<simple_term>
| <prefix_term>
| <generation_term>
| <proximity_term>
}
[ WEIGHT (weight_value) ]
} [ ,...n ]
)
Estos medios se puede escribir consultas tales como:
SELECT UserName
FROM Tbl_Users
WHERE CONTAINS(UserName, '"little*" NEAR tables')
Results:
Little Bobby Tables
Buena suerte :)
Lo he votado y lo he excluido como la respuesta no solo porque es una respuesta excelente y detallada, sino también por la referencia xkcd. GANAR. –