代码之家  ›  专栏  ›  技术社区  ›  jdelator

关键字到SQL搜索

  •  1
  • jdelator  · 技术社区  · 16 年前

    用例

    问题

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

    提出

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

    想法/建议/链接?

    4 回复  |  直到 16 年前
        1
  •  5
  •   Petrus Theron    16 年前

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

    数据库架构

    Keywords table—每个可能被搜索的单词的加权表(因此,它在某处被引用),每个记录有以下数据:

    • 关键字ID(不是单词),
    • 单词的Soundex Alpha值
    • 重量

    ProductKeywords

    • 产品ID,
    • 关键字ID,
    • 重量

    关键词权重

    我使用整数来加权,但是使用十进制值将提供更多的功能,可能排序速度稍慢。

    每当更新任何产品字段时,例如艺术家或标题(这种情况并不经常发生),数据库触发器都会重新索引产品的关键字,就像在事务中那样:

    1. 如果不再引用,所有产品关键字都将取消关联并删除。
    2. 产品关键字
    3. 关键字权重然后根据字段的重要性增加一个值。可以根据字段的重要性添加、减去权重。如果艺术家比头衔更重要,那么从它的名字中减去1或2 ProductKeyword 重量调整。
    4. 每个索引字段值都会去掉任何非字母数字字符,并分成单独的词组,例如,“Billy Joel”变成“Billy”和“Joel”。
    5. 每个字段值的每个单独的词组作为关键字进行发声和存储/检索,并以与步骤2中相同的方式与产品关联。如果关键字已与产品关联,则只需调整其权重。

    1. 获取输入查询搜索字符串的全部内容并查找直接匹配的关键字。检索内存表中关键字的所有ProductKeywords以及关键字权重(不同于ProductKeyword权重)。
    2. 去掉所有非字母数字字符并将查询拆分为关键字。检索所有现有关键字(只有少数关键字匹配)。将ProductKeywords与内存表中的匹配关键字以及关键字权重连接起来,这与ProductKeyword权重不同。
    3. 重复步骤2,但改用soundex值,调整权重以降低相关性。
    4. 按关键字权重、ProductKeyword权重和Sales对结果排序。最终的求和/排序和/或加权取决于您的实现。
    5. 限制搜索结果并将产品搜索结果返回给客户端。
        2
  •  3
  •   TFD    16 年前

    你要找的是 自然语言处理 . 奇怪的是 习惯于 免费提供 English Query 在SQL Server 2000及以前版本中。但现在它不见了

    其他来源包括:

    这个概念是一个将单词映射到表、列、关系等的元数据字典和一个结合在一起的英语句子解析器,将一个英语句子(或者仅仅是一些关键字)转换成一个真正的查询

        3
  •  0
  •   SLaks    16 年前

    如果您使用的是SQL Server,那么只需使用其 Full-Text Search

        4
  •  0
  •   Scot Hauder    16 年前

    您可以使用混合方法,获取全文搜索结果,并根据您的#4中的元数据对其进行进一步筛选。对于更智能的内容,您可以创建一个简单的有监督学习解决方案,方法是跟踪用户在搜索后单击的链接,并将该选择与关键搜索词一起存储在决策树中。然后从这个决策树中挖掘搜索

    推荐文章