gpt4 book ai didi

sql-server - SQL 搜索的关键字

转载 作者:搜寻专家 更新时间:2023-10-30 21:45:12 24 4
gpt4 key购买 nike

用例

当用户访问我的网站时,他们将看到一个非常像 SO 的搜索框。他们可以使用计划文本搜索结果。 “.net 问题”、“封闭式问题”、“.net 和 java”等。搜索的功能与 SO 有点不同,因为它会尝试尽可能多地使用数据库的模式而不是直接全文搜索。所以“.net 问题”只会搜索 .net 问题而不是 .net 答案(可能不适用于 SO 案例,这里只是一个例子),“封闭问题”将返回封闭的问题,“.net 和 java” questions 将返回与 .net 和 java 相关的问题,而不是其他问题。

问题

我不太熟悉这些词,但我基本上想对 SQL 驱动搜索做一个关键字。我知道数据库的模式,我也可以对数据库进行数据挖掘。在我尝试实现之前,我想知道那里已经存在的任何当前方法。我想这个问题是关于什么是针对所述问题的良好设计。

提议

到目前为止我提出的解决方案看起来像这样

  1. 清理输入。只需删除任何特殊字符
  2. 将输入解析为数据 block 。将“c# java”的输入分解为 c# 和 java 还将“'c# java' 问题”等特殊情况处理为“c# java”和“问题”。
  3. 根据输入构建一棵树
  4. 将数据绑定(bind)到元数据中。因此,转换诸如封闭式问题之类的内容并将其与表格的 isclosed 列相关联。
  5. 将树转换为 sql 查询。

想法/建议/链接?

最佳答案

我经营一家数字音乐商店,使用“单一搜索”,根据关键字的出现次数和产品出现的模式对关键字进行加权,例如。具有不同的列,例如“艺术家”、“标题”或“发布者”。

Products也与专辑和播放列表相关,但为了简单说明,我只详细说明Products关键字的索引和查询。

数据库模式

Keywords 表 - 每个可能被搜索的词的加权表(因此,它在某处被引用),每条记录的数据如下:

  • 关键字 ID(不是单词),
  • 这个词本身,
  • 单词的 Soundex Alpha 值
  • 体重

ProductKeywords 表 - 产品的任何字段(或列)引用的每个关键字的加权表,每条记录包含以下数据:

  • 产品编号,
  • 关键字 ID,
  • 体重

关键词权重

权重值表示单词出现的频率。权重较低的匹配关键字“更独特”,更有可能是正在搜索的内容。这样,经常出现的词会自动“降低权重”,例如。 “the”、“a”或“I”。但是,最好在编制索引之前去掉那些常见单词的原子出现。

我使用整数进行加权,但使用小数值会提供更多的通用性,排序可能会稍微慢一些。

索引

每当更新任何产品字段时,例如。艺术家或标题(这并不经常发生),数据库触发器重新索引产品的关键字,就像在交易中一样:

  1. 如果不再引用,所有产品关键字将被取消关联并删除。
  2. 每个索引字段(例如艺术家)值都作为关键字完整存储/检索,并与 ProductKeywords 表中的产品相关以进行直接匹配。
  3. 关键字权重然后根据字段的重要性增加一个值。您可以根据字段的重要性添加、减去权重。如果艺术家比标题更重要,请从其 ProductKeyword 权重调整中减去 1 或 2。
  4. 每个索引字段值都去除了任何非字母数字字符,并分成单独的词组,例如。 “比利·乔尔”变成了“比利”和“乔尔”。
  5. 每个字段值的每个单独的词组都作为关键字进行发音和存储/检索,并以与步骤 2 中相同的方式与产品相关联。如果关键字已经与产品相关联,则只需调整其权重.

查询

  1. 完整地获取输入查询搜索字符串并查找直接匹配的关键字。在内存表中检索关键字的所有 ProductKeywords 以及关键字权重(不同于 ProductKeyword 权重)。
  2. 去除所有非字母数字字符并将查询拆分为关键字。检索所有现有关键字(只有少数会匹配)。将 ProductKeywords 连同关键字权重一起匹配到内存表中,这与 ProductKeyword 权重不同。
  3. 重复第 2 步,但改用 soundex 值,调整权重以降低相关性。
  4. 将检索到的 ProductKeywords 加入到它们的相关产品中,并检索每个产品的销售额,这是衡量受欢迎程度的指标。
  5. 按关键字权重、产品关键字权重和销售额对结果进行排序。最终的求和/排序和/或加权取决于您的实现。
  6. 限制结果并将产品搜索结果返回给客户。

关于sql-server - SQL 搜索的关键字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2474229/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com