У меня есть таблица SQL Server, и я пытаюсь понять смысл полнотекстового поиска: -)
Я настроил полнотекстовый поиск каталог и полнотекстовый индекс в таблице Entry
, которая содержит среди других столбцов столбец VARCHAR (20)
с именем VPN-ID
.
Существует около 200000 строк в этой таблице, а столбец 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*"')
этот возвращает (разделение поискового запроса на тире):
SELECT (list of columns)
FROM dbo.Entry
WHERE CONTAINS(*, ' "VPN" AND "000" AND "362*"')
ОК - кажется немного странным, что тире приводит к разделению, которое почему-то не работа .....