SQL Server Полнотекстовый поиск не находит мои строки - PullRequest
9 голосов
/ 18 апреля 2011

У меня есть таблица 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

Ответы [ 2 ]

6 голосов
/ 18 апреля 2011

какой Language for Word Breaker вы используете?Вы пробовали Neutral?

enter image description here

РЕДАКТИРОВАТЬ:
Кроме того, вы должны использовать WHERE CONTAINS([Column], '"text*"').См. MSDN для получения дополнительной информации о Поисках префиксов :

C.Использование CONTAINS с

В следующем примере возвращаются все названия продуктов, по крайней мере, с одним словом, начинающимся с цепочки префиксов в столбце Имя.

USE AdventureWorks2008R2;
GO
SELECT Name
FROM Production.Product
WHERE CONTAINS(Name, ' "Chain*" ');
GO

кстати ... похожий вопрос здесь и здесь

2 голосов
/ 18 апреля 2011

Просто интересно, но почему бы вам просто не сделать это:

SELECT (list of columns)
FROM dbo.Entry
WHERE [VPN-ID] LIKE 'VPN-000-36%'

Мне кажется, что полнотекстовый поиск не является подходящим инструментом для работы.Просто используйте нормальный индекс для этого столбца.

...