sql-server – SQL搜索的关键字
用例 当用户访问我的网站时,他们将面临一个类似SO的搜索框.他们可以使用计划文本搜索结果. “.net问题”,“封闭式问题”,“.net和java”等等.搜索功能会有点不同,因为它会尝试尽可能多地使用数据库的模式而不是直接全文搜索.所以“.net问题”只会搜索.net问题而不是.net答案(可能不适用于SO案例,这里只是一个例子),“封闭式问题”将返回已关闭的问题,“.net和java”问题将返回与.net和java相关的问题. 问题 我对这些单词不太熟悉,但我基本上想要为SQL驱动的搜索做一个关键字.我知道数据库的模式,我也可以数据库.我想知道在我尝试实现之前已经存在的任何当前方法.我想这个问题是针对所述问题的优秀设计. 建议 到目前为止我提出的解决方案看起来像这样 >清洁输入.只需删除任何特殊字符 思考/建议/链接? 解决方法我运行一个带有“单一搜索”的数字音乐商店,根据其出现次数和产品出现的架构对关键字进行加权,例如.使用不同的列,如“艺术家”,“标题”或“发布者”.产品也与相册和播放列表相关,但为了更简单的解释,我将仅详细说明产品关键字的索引和查询. 数据库架构 关键字table – 每个可能被搜索的单词的加权表(因此,它被引用到某处),每个记录包含以下数据: >关键字ID(不是单词), ProductKeywords表 – 任何产品的字段(或列)引用的每个关键字的加权表,每条记录包含以下数据: >产品ID, 关键字加权 加权值表示单词出现的频率.匹配较低权重的关键字“更独特”,更有可能成为搜索的内容.以这种方式,经常出现的单词被自动“降低权重”,例如. “the”,“a”或“I”.但是,最好在索引之前去掉那些常见单词的原子事件. 我使用整数进行加权,但使用小数值将提供更多功能,可能会稍微减慢排序. 索引 每当更新任何产品字段时,例如.艺术家或标题(通常不会发生),数据库触发器在事务内重新索引产品的关键字: >如果不再引用,则取消关联并删除所有产品关键字. 查询 >完整地获取输入查询搜索字符串并查找直接匹配关键字.检索内存表中关键字的所有ProductKeywords以及关键字权重(与ProductKeyword权重不同).>删除所有非字母数字字符并将查询拆分为关键字.检索所有现有关键字(只有少数匹配).加入ProductKeywords以匹配关键字到内存表以及关键字权重,这与ProductKeyword权重不同.>重复步骤2,但改为使用soundex值,调整权重不太相关.>将检索到的ProductKeywords加入其相关产品中,并检索每个产品的销售额,这是衡量受欢迎程度的指标.>按关键字权重,ProductKeyword权重和销售额对结果进行排序.最终的求和/排序和/或加权取决于您的实施.>限制结果并将产品搜索结果返回给客户. (编辑:徐州站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |