Во-первых, вам нужно быть включен полнотекстового поиска индексацию на производственных серверах, поэтому, если это не так, вы не захотите этого делать.
Однако, если это уже готово, поиск полного текста относительно прост.
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 исходит из СОДЕРЖИТ (и 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
Удачи :)
Я проголосовал за это и исключил его как ответ не только потому, что это отличный и подробный ответ, но и для справки xkcd. ВЫИГРАТЬ. – 2008-10-14 19:50:39