У меня есть таблица SQL Server, и я пытаюсь разобраться в полнотекстовом поиске: -)
Я настроил полнотекстовый каталог и полнотекстовый индекс для таблицы Entry
, которая содержитдругие столбцы VARCHAR(20)
столбец с именем VPN-ID
.
В этой таблице содержится около 200 000 строк, а столбец VPN-ID
имеет такие значения, как:
VPN-000-359-90
VPN-000-363-85
VPN-000-362-07
VPN-000-362-91
VPN-000-355-55
VPN-000-368-36
VPN-000-356-90
СейчасЯ пытаюсь найти строки в этой таблице с помощью полнотекстового поиска.
Когда я делаю
SELECT (list of columns)
FROM dbo.Entry
WHERE CONTAINS(*, 'VPN-000-362-07')
, все в порядке, и мои строки возвращаются.
Когда я начинаю поиск с подстановочным знаком, как это:
SELECT (list of columns)
FROM dbo.Entry
WHERE CONTAINS(*, 'VPN-000-362-%')
Я получаю результаты, и все, кажется, хорошо.
ОДНАКО: , когда я ищу так:
SELECT (list of columns)
FROM dbo.Entry
WHERE CONTAINS(*, 'VPN-000-36%')
внезапно я вообще не получаю результатов ..... даже если есть ясно строк, соответствующих этому критерию поиска ...
Есть идеи, почему??Какие еще "сюрпризы" могут быть у меня в полнотекстовом поиске?: -)
Обновление: для создания моего полнотекстового каталога, который я использовал:
CREATE FULLTEXT CATALOG MyCatalog WITH ACCENT_SENSITIVITY = OFF
и для создания полнотекстового индекса в моей таблице я использовал
CREATE FULLTEXT INDEX
ON dbo.Entry(list of columns)
KEY INDEX PK_Entry
Я старался избегать любых «странных» опций, насколько мог.
Обновление № 2: после еще немного исследований, похоже, что SQL Server полнотекстовый поисккак-то интерпретирует мои тире внутри строк как разделители ....
Хотя этот запрос ничего не возвращает:
SELECT (list of columns)
FROM dbo.Entry
WHERE CONTAINS(*, '"VPN-000-362*"')
этот запрос делает (разбивая поисковый запрос на тире):
1053