Проблема полнотекстового индекса SQL Server 2008 - PullRequest
1 голос
/ 02 июня 2011

У меня есть TableA, как указано ниже, в котором полнотекстовый индекс указан для столбца Name

TableA

Id (PK)
Name (TXI)

Таблицаимеет следующие записи:

ingrid
neville
ned
audry
inga

Затем я запускаю следующий запрос к таблице:

SELECT * FROM TableA WHERE CONTAINS(Name,'"n*"');

Результат запроса следующий:

Id         Name
1          ingrid 
2          neville
3          ned

Почему он возвращает первую запись, даже если она не начинается с 'n'?

Ответы [ 4 ]

0 голосов
/ 09 мая 2012

Ваш запрос работает для меня ....:

TRUNCATE TABLE FTS_Demo_2

INSERT  FTS_Demo_2 (Document) VALUES ('ingrid')
INSERT  FTS_Demo_2 (Document) VALUES ('neville')
INSERT  FTS_Demo_2 (Document) VALUES ('ned')
INSERT  FTS_Demo_2 (Document) VALUES ('audry')
INSERT  FTS_Demo_2 (Document) VALUES ('inga')

/* WAIT FOR AUTO POPULATION TO POPULATE */

SELECT  * FROM FTS_Demo_2 WHERE CONTAINS (Document, '"n*"')

Результаты:

RecordID    Document
----------- --------------------
2           neville
3           ned

(2 row(s) affected)

Может быть, это проблема с вашим индексом или каталогом FTS? Какие у вас типы столбцов? Я сделал столбец в этом примере NVARCHAR (MAX), и это свойства каталога:

enter image description here

0 голосов
/ 02 июня 2011

Возможно, ваш полнотекстовый индекс устарел.Решает ли это восстановление вашей проблемы?

0 голосов
/ 03 июня 2011

Следуя предложению Джима Б, попробуйте обновить ваш каталог:

ALTER FULLTEXT CATALOG TableA REORGANIZE

, затем

SELECT * FROM TableA WHERE CONTAINS(Name,'"n*"');

Еще один совет: Цель полнотекстового поискаСЛОВА в тексте , поэтому я не знаю, тестируете ли вы полный текст, но чтобы получить то, что вы ищете, они правильно выбирают оператор LIKE как:

SELECT * FROM TableA WHERE Name LIKE 'n%';
0 голосов
/ 02 июня 2011

Попробуйте:

SELECT * FROM TableA WHERE CONTAINS(Name,'n*');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...