T-SQL存储过程返回谷歌样式“建议”的搜索结果

前端之家收集整理的这篇文章主要介绍了T-SQL存储过程返回谷歌样式“建议”的搜索结果前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
好吧,使用sql Server 2008.在我的网页上,我有一个文本框,其中连接了jQuery-UI AutoComplete.

现在我需要一个存储过程来搜索单个表的所有列(或者我想的多个连接表),以查找来自文本框/自动完成AJAX调用搜索字符串,并返回“建议的”搜索字符串.我正在使用AdventureWorks数据库进行测试(产品表)

因此,例如,产品表包含产品名称和产品编号(以及其他)的列,我想根据用户输入返回建议的搜索字符串,他们可以输入产品名称和/或产品编号.

我让它在单个列上工作很简单.有任何想法吗?

解决方法

我将建议全文搜索(MS’或Lucene将工作)下面的代码使用MSsql FTS作为我目前在我的应用程序中使用的.

如果您还没有安装FTS搜索.如果您已检查该服务是否正在运行.
在管理工作室运行此操作以设置目录并添加产品表;目录中的颜色/名称/产品编号.

USE [AdventureWorks]
GO
CREATE FULLTEXT CATALOG [ProductsTest]WITH ACCENT_SENSITIVITY = OFF
AUTHORIZATION [dbo]

GO

USE [AdventureWorks]
GO
CREATE FULLTEXT INDEX ON [Production].[Product] KEY INDEX [PK_Product_ProductID] ON ([ProductsTest]) WITH (CHANGE_TRACKING AUTO)
GO
USE [AdventureWorks]
GO
ALTER FULLTEXT INDEX ON [Production].[Product] ADD ([Color])
GO
USE [AdventureWorks]
GO
ALTER FULLTEXT INDEX ON [Production].[Product] ADD ([Name])
GO
USE [AdventureWorks]
GO
ALTER FULLTEXT INDEX ON [Production].[Product] ADD ([ProductNumber])
GO
USE [AdventureWorks]
GO
ALTER FULLTEXT INDEX ON [Production].[Product] ENABLE
GO

然后,您可以立即对所有列运行查询;例如银(选择颜色和名称)

Select * from production.product where
contains(*,'"Silver*"')

查询上的*将找到Silver *,因此您可以使用此功能用户输入时构建结果.要考虑的一件事是谷歌让这个工作实时 – 如果您正在搜索大量数据,您将能够在不中断用户输入的情况下获取数据.我认为一般人们通过从他们正在寻找的第一个字母输入来使用这些搜索 – 我接受会有拼写错误 – 你可以在他们按下的每个空格之后实施一个拼写检查器来处理它.或者存储运行的搜索并查看错误拼写并更改代码以根据映射处理(或使用自定义同义词库在FTS中).

对任何企业而言,排名都将是一个有趣的发展问题;你是否找到了Mountain Frame的第一个结果 – 或者你想通过销售或价格来衡量它们吗?如果用户键入多个文本术语,则可以使用FTS根据搜索字符串生成排名.

select aa.rank,bb.* 
From containstable(production.product,*,'"Mountain" and "Silver*"') aa
inner join production.product bb
on aa.[key] = bb.productid
order by rank desc

这返回30行;和权重基于用户输入的文本来确定第一位记录.在任何一种情况下,您可能都希望添加编码排名来调整结果以满足您的业务需求 – 排名最高价格的小部件1可能不是这样.这就是为什么你要存储人们搜索/点击的内容,以便你以后可以分析结果.

有一个非常好的.000版本.Net可以翻译输入到FTS可用语言的谷歌样式字符串查询,这使得熟悉任何使用您网站的布尔搜索.

您可能还希望通过审核用户输入的内容并最终访问并使用成功地图来更改最终建议以实际使其与用户相关,从而添加一些智慧人群功能.

作为最终的建议,如果这是一个商业网站,你可能想看看Easyask这是一个可怕的伟大的自然语言处理器

猜你在找的MsSQL相关文章