Прежде всего, вам нужно включить индексацию полнотекстового поиска на производственных серверах, так что если это не входит в сферу действия, вы не захотите идти с этим.
Однако, если это уже готово, полнотекстовый поиск относительно прост.
T-SQL имеет 4 предиката, используемых для полнотекстового поиска:
- FREETEXT
- FREETEXTTABLE
- СОДЕРЖИТ
- CONTAINSTABLE
FREETEXT является самым простым и может быть сделано следующим образом:
SELECT UserName
FROM Tbl_Users
WHERE FREETEXT (UserName, 'bob' )
Results:
JimBob
Little Bobby Tables
FREETEXTTABLE работает так же, как FreeTEXT, за исключением того, что возвращает результаты в виде таблицы.
Настоящая сила полнотекстового поиска в T-SQL заключается в предикате CONTAINS (и CONTAINSTABLE) ... Этот код огромен, поэтому я просто вставлю его в:
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 ]
)
Это означает, что вы можете писать запросы, такие как:
SELECT UserName
FROM Tbl_Users
WHERE CONTAINS(UserName, '"little*" NEAR tables')
Results:
Little Bobby Tables
Удачи:)