Tsql SQL搜索,不带全文索引

Tsql SQL搜索,不带全文索引,tsql,full-text-search,azure-sql-database,Tsql,Full Text Search,Azure Sql Database,我们正在将应用程序的数据库迁移到Windows Azure SQL数据库。在应用程序中,有几个轻量级搜索函数,我们目前使用T-SQL和全文索引来处理搜索。但是,Azure中目前不提供全文索引 我正在研究非SQL解决方案,比如Lucene.Net,它看起来很不错,但我认为这对于我们正在尝试做的事情来说可能有些过头了。我们正在搜索的数据集并不庞大——平均不到100000条记录——而且只有少数记录。示例表可能如下所示 CREATE TABLE dbo.Items( [ItemID] [int]

我们正在将应用程序的数据库迁移到Windows Azure SQL数据库。在应用程序中,有几个轻量级搜索函数,我们目前使用T-SQL和全文索引来处理搜索。但是,Azure中目前不提供全文索引

我正在研究非SQL解决方案,比如Lucene.Net,它看起来很不错,但我认为这对于我们正在尝试做的事情来说可能有些过头了。我们正在搜索的数据集并不庞大——平均不到100000条记录——而且只有少数记录。示例表可能如下所示

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)
) 
…我们要在其中搜索“作者”、“主题”和“项目内容”字段。作者和主题可以是多个单词,ItemContent字段可以是多个段落,因此我不知道如何避免表格扫描。全文索引的性能非常好,我并不期待这样做:

从dbo中选择ItemID。其中,作者(如“%”++@SearchTerm++“%”)或主题(如“%”++@SearchTerm++“%”)或ItemContent(如“%”++@SearchTerm++“%”的项目


有人建议如何在不使用全文索引的情况下优化这种类型的搜索吗?

另一种方法是,如果不是完整的数据仓库解决方案,也可以创建一些非规范化的表,将这些列转换为单个记录(或更少的记录)。。。因此,您将有一个数据库表w/just ItemId | CombinedSearchableInfo,其中您的CombinedSearchableInfo可能是“Herman Melville Moby Dick”,在这种情况下,您所做的计算工作更少(您可以使用不同的查询优化技术来实现类似的功能)。您只需通过离线流程维护搜索表

请记住,Lucene可以帮助解决拼写错误和关联性等问题,并且有书籍和作者等领域空间,拼写错误是好的,而且很可能


(此外,如果您选择azure路线,您现在可以使用表存储和blob存储运行大量内容……您可以实际运行sql server,将全文索引作为blob存储的一部分,而无需改装任何内容……您将失去azure sql的所有性能优势,但嘿……这是一个选项)

您希望做什么样的搜索。。。如果你想搜索像“赫尔曼·梅尔维尔·白鲸”这样的东西,lucene会抓到这个,但你的搜索查询不会。。。你确定你不想要lucene-ish解决方案吗?我确实喜欢lucene,因为它确实是一个“搜索”解决方案,而且肯定正在运行。这就是说,到目前为止,我们的全文索引查询对于这项特定的任务非常有效——查询往往是快速筛选类型的查询,而不是更复杂的搜索字符串。因此,如果我能从T-SQL解决方案中获得良好的性能,我会朝这个方向努力。谢谢你的建议。我正在寻找类似的替代方案。如果“CombinedSearchableInfo”是我要搜索的列中的连接内容,那么您如何看待索引视图而不是表?我的理解是,如果我为视图编制索引并使用(NOEXPAND)查询它,它的性能基本上就像一个表。当然,它仍然是一个扫描-我想希望是,如果扫描只看一列,它的性能会更好。