我们正在将应用程序的数据库迁移到 Windows Azure SQL 数据库。在应用程序中,有几个轻量级搜索功能,我们目前使用 T-SQL 和全文索引来处理搜索。但是,全文索引目前在 Azure 中不可用。
我正在研究诸如 Lucene.Net 之类的非 SQL 解决方案,它看起来很棒,但我认为这对于我们正在尝试做的事情来说可能有点矫枉过正。我们正在搜索的数据集并不庞大——平均不到 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 字段。Author 和 Subject 可以是多个单词,ItemContent 字段可以是几个段落,所以我看不出如何避免 Table Scan。全文索引表现得非常好,我并不期待这样做:
SELECT ItemID FROM dbo.Items WHERE Author LIKE '%' + @SearchTerm + '%' OR Subject LIKE '%' + @SearchTerm + '%' OR ItemContent LIKE '%' + @SearchTerm + '%'
有人对不使用全文索引优化此类搜索的方法有建议吗?