Sql server 如何实现企业搜索

Sql server 如何实现企业搜索,sql-server,oracle,search,full-text-search,search-engine,Sql Server,Oracle,Search,Full Text Search,Search Engine,我们正在公司中搜索不同的数据源。我们有多个数据库中的信息,需要从我们的内部网进行搜索。最初的全文搜索(FTS)实验结果令人失望。我们已经实现了一个定制的搜索引擎,它可以很好地满足我们的需求。然而,我们希望确保我们做的是“正确的事情”,并且不会错过任何可以让我们的工作更轻松的好工具 我们需要: 列搜索 按列搜索的能力 我们标记表中哪些列是可搜索的 在db列和数据之间保持一定的关系 我们对结果提供高级过滤 促进(亚马逊风格)过滤 通过对结果进行分组并允许用户通过复选框进行筛选来提供筛选 这是一

我们正在公司中搜索不同的数据源。我们有多个数据库中的信息,需要从我们的内部网进行搜索。最初的全文搜索(FTS)实验结果令人失望。我们已经实现了一个定制的搜索引擎,它可以很好地满足我们的需求。然而,我们希望确保我们做的是“正确的事情”,并且不会错过任何可以让我们的工作更轻松的好工具

我们需要:
  • 列搜索
    • 按列搜索的能力
    • 我们标记表中哪些列是可搜索的
  • 在db列和数据之间保持一定的关系
    • 我们对结果提供高级过滤
    • 促进(亚马逊风格)过滤
    • 通过对结果进行分组并允许用户通过复选框进行筛选来提供筛选
    • 这是一个很棒的特性,用户非常喜欢它
  • 部分词匹配
    • 我们有很多独特的标识符(产品id等)
    • 唯一id可以包含具有含义(位置等)的子部分
    • 或者只有一部分可用(当用户搜索时)
    • 或者(由于设计决策非常糟糕),id中可能有空白
    • 这是我们现在通过CHARINDEX(MSSQL)和INSTR(ORACLE)实现的一个主要功能
    • 与全文相比,在MSSQL上使用char索引函数的性能相当(+/-)
    • 没有在Oracle上进行测试
    • 然而,针对这两种类型的数据库的搜索速度非常快
    • 我们利用索引(MSSQL)和物化(Oracle)视图来提高速度
      • 这是一个巨大的胜利,Oracle物化视图优于MSSQL索引视图
      • 两者都在只读加入情况下提供加速功能(如搜索合并公司和产品)
    • 符合用户对范例CTRL-f->enter text->find matches期望的搜索
    • 全文搜索在这方面不是最好的(匹配速度慢且不一致)
    • 部分匹配(参见“部分单词匹配”)
  • 很高兴有:
  • 实时搜索数据库
    • 跳过索引跳过,这不是一个硬性要求
  • 拼写建议
    • Xapian有这个
    • 类似于谷歌的“你的意思是:
  • 我们不需要的是:
  • 我们不需要索引文档
    • 在这一点上,搜索我们的数据源是最重要的事情
    • 即使在搜索文档时,我们也会寻找部分单词匹配,等等
  • 排名
    • 事实证明,我们自己的简单排名算法比FTS的同类算法要好得多
    • 用户理解它,我们理解它,它几乎总是相关的
  • 堵塞
    • 只是不需要[跑|跑|跑]
  • 高级搜索运算符
    • 短语匹配,或/和等
    • 根据雅各布·尼尔森的说法
      • 大多数用户都使用简单的搜索短语
      • 很少有人使用高级搜索(如果可用)
      • 信息架构第3版第185页
      • “很少有用户利用它们[高级搜索功能]”
      • 我们的类似亚马逊的过滤允许更好的过滤(通过用户测试)
  • 全文搜索
    • 我们发现结果对用户来说并不总是“有意义”
    • 使用FTS进行搜索很难调整(哪一组运营商符合用户的期望)
    • 高级搜索操作员是不可能的
    • 我们不需要它们,因为
    • 用户不理解它们
    • 性能与char索引函数非常接近(+/1)
    • 但结果有时只是“奇怪”
  • 问题是: 是否有一种解决方案允许我们保留键值对“过滤功能”,提供特定于列的匹配、部分单词匹配和其他功能,而不必进行全文搜索?

    我愿意接受任何建议。我想知道文档/哈希表nosql数据存储(MongoDB等)是否有用?( ). 任何与这些经验是赞赏的

    再次强调,确保我们的内部定制版本没有遗漏某些内容。如果有什么“现成的”,我会感兴趣的。或者,如果您已经从一些组件中构建了一些东西,那么您使用了哪些组件(搜索引擎、数据存储等)以及为什么


    你也可以提出你的FTS观点。在您说“只使用全文搜索,因为这是我们唯一的工具”之前,请确保它满足上述要求。

    我建议您研究Solr,我相信它将满足您的需求:


    对于现成的解决方案:您是否查看了

    Google Mini/GSA网站的报价:

    。。。如果直接数据库索引是对您的要求,我们鼓励您考虑具有直接数据库连接的谷歌搜索设备。


    当然,它会以你所期望的那种愚蠢的方式索引所有其他内容。

    我最终编写了自己的代码

    结果非常好。用户喜欢它,它与我们现有的技术配合得很好

    其实没那么难。只是花了点时间

    特点:

    • 分面搜索(亚马逊、沃尔玛等)
    • 部分单词搜索(真正的内容不是全文)
    • 搜索数据库(oracle、sql server等)和非数据库源
    • 与现有环境很好地集成
    • 维护关系,以便进行n对n搜索和显示
    • -->这意味着我可以在搜索结果中显示主记录的子记录
    • -->我还可以搜索任何子字段并返回主记录

    使用字典和大量内存可以做的事情真是太棒了。

    ApacheSolr是一种很好的项目启动方式,而且它是开源的。你也可以