SQL Server 2012 - полнотекстовый поиск по полю nvarchar с хэшами SHA ничего не возвращает

У меня есть таблица SQL с 60 миллионами записей с 2 ​​столбцами: идентификатор и хэш.

ID является инкрементным int PK.

Hash - это поле nvarchar с индексом.

Я создал полнотекстовый индекс в поле Hash следующим образом:

CREATE FULLTEXT CATALOG hashes_catalog;
GO
CREATE FULLTEXT INDEX 
  ON dbo.hashes(hash LANGUAGE 1033) 
  KEY INDEX IXC_Hash ON hashes_catalog; 
GO

Но когда я пытаюсь выполнить поиск по полному тексту, результатов нет, например:

SELECT * FROM Hashes WHERE CONTAINS(hash,'1CE')

Ничего не возвращает

Но такие данные существуют, это пример данных из таблицы:

1CefATjZSfzDK1bn15tFv5EHzQtxmCkNQL
1CEfatKXLUomearrh7JyKgv4w1Ci1jxM8B
1CefAtyhBVXda5324NwTkfBMkEZ9YcF6vN
1CEfAUbiB2AfqjGpg8r8hxuAxTdzrDPGmv
1CEFAUzKC2Ffi8HwMSfkqTDN8deBTjXnrD
1CEfavd9sVZmLsez8JHKUHHZ7ZEAaKbp6W
1CEFAVfD55it65d6MdQpo3mnnBhBviLTh4
1CEfAVjjGrBQCkLh6qBEfwX46G213DnNhc
1Cefavph9RxQdLfasHR25B3P9W98tCGGus
1CEfavqq739Ny9sH7F1qCS5GzSpVB1Yz5g
1CEFAw68XLVRwzQSP7HNW4kd5z3JRdcPgU

Если я выполню

SELECT * FROM Hashes WHERE Hash like '%1CE%'

Есть 129184 результатов.

Любые идеи, как заставить полнотекстовый поиск работать для таких полей, как это? Это вообще возможно?

1 ответ

Если хеш начинается с этого термина, то вы можете использовать следующий синтаксис:

SELECT * FROM Hashes WHERE CONTAINS(hash,'"1CE*"')

Полнотекстовый поиск, вероятно, не лучший выбор для поисков такого рода. Он работает, разбивая ваш текст по токенам, и если весь текст в поле состоит из одного слова (без знаков препинания), использование полного текста над LIKE не дает больших преимуществ.

Другие вопросы по тегам