2012-05-24 2 views
0

У меня есть таблица, которая хранит дерево как структуру имен файлов. В этой таблице в настоящее время имеется 8 миллионов записей. Я работаю над тем, чтобы быстро найти список файлов, которые имеют определенный серийный номер, встроенный в имя.Использование полнотекстового поиска по именам файлов

FS_NODES 
----------------------------------- 
NODE_ID    bigint PK 
ROOT_ID    bigint 
PARENT_ID   bigint 
NODE_TYPE   tinyint 
NODE_NAME   nvarchar(250) 
REC_MODIFIED_UTC  datetime 
REC_DELETION_BIT  bit 

имя Пример файла (как хранится в имя_узла):
scriptname_SomeSerialNumber_201205240730.xml

Как и ожидалось, LIKE заявление, чтобы найти файлы занимает несколько минут, чтобы просмотреть всю таблицу и хотели бы улучшить это. Для имен нет согласованных шаблонов, так как каждому разработчику нравится создавать собственное соглашение об именах.

Я попытался использовать полнотекстовый поиск и действительно люблю эту идею, но не могу ее найти, чтобы найти файлы, основанные на ключевых словах в названии. Я считаю, что проблема связана с подчеркиванием.

Любые предложения о том, как я могу заставить это работать? Я использую нейтральный язык для каталога.

@@VERSION 
Microsoft SQL Server 2005 - 9.00.4035.00 (Intel X86) 
Nov 24 2008 13:01:59 
Copyright (c) 1988-2005 Microsoft Corporation 
Standard Edition on Windows NT 5.2 (Build 3790: Service Pack 2) 

Есть ли способ изменить каталог и разделить ключевые слова вручную? Спасибо!

ответ

1

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

EDIT по запросу пользователя:

Добавить вычисляемый столбец, REPLACE (имя файла, '_', ' «). Или вместо вычисленного столбца - только столбец, который вы вручную заполняете для существующих данных, и изменяете свою процедуру вставки, чтобы иметь дело с продолжением. Или даже разбить их на отдельные строки в связанной таблице.

+0

Обычное соглашение об именах работает, но это помогает только продвигаться вперед. Имя файла может содержать несколько ключевых слов, и мне нравится стиль дерева выражений поиска с помощью fts. Я знаю, что это не ваши типичные «слова», но это было бы идеальным решением, если бы я мог заставить его сломать символы подчеркивания. Мой план B - найти шаблоны в именах и разобрать и пометить ключевые слова, но это проще сказать. Спасибо за ваш отзыв. – RickCard

+0

Я добавил вычисленную колонку, как вы предложили, и FTS смогла использовать эту колонку в каталоге. Я снова попробовал запрос CONTAINS в новом столбце и возвратил записи, как ожидалось, в миллисекундах по сравнению с минутами. :) Спасибо! – RickCard

Смежные вопросы