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 не дает больших преимуществ.