Мы находимся в процессе переноса базы данных нашего приложения в базу данных Windows Azure SQL. В приложении есть несколько облегченных функций поиска, и в настоящее время мы используем T-SQL и полнотекстовую индексацию для обработки поиска. Однако в настоящее время полнотекстовое индексирование в Azure недоступно.
Я изучаю решения, отличные от SQL, такие как Lucene.Net, которые выглядят великолепно, но я думаю, что это может быть излишним для того, что мы пытаемся сделать. Наборы данных, которые мы ищем, невелики - в среднем менее 100 000 записей - и их всего несколько. Примерная таблица может выглядеть примерно так ...
CREATE TABLE dbo.Items(
[ItemID] [int] IDENTITY(1,1) NOT NULL,
[Author] [varchar](255) NULL,
[Subject] [varchar](255) NULL,
[ItemContent] [nvarchar](max) NULL,
CONSTRAINT [PK_Items] PRIMARY KEY CLUSTERED ([ItemID] ASC)
)
... где мы хотим искать в полях Author, Subject и ItemContent. Автор и тема могут состоять из нескольких слов, а поле ItemContent может состоять из нескольких абзацев, поэтому я не понимаю, как избежать сканирования таблицы. Полнотекстовый индекс работал очень хорошо, и я не собираюсь этого делать:
ВЫБРАТЬ ИДЕНТИФИКАЦИЮ ИЗ dbo.Items, ГДЕ Автор КАК '%' + @SearchTerm + '%' ИЛИ Тема КАК '%' + @SearchTerm + '%' ИЛИ ItemContent КАК '%' + @SearchTerm + '%'
У кого-нибудь есть предложения по оптимизации этого типа поиска без использования полнотекстового индекса?