【问题标题】:How to implement an Enterprise Search如何实施企业搜索
【发布时间】:2011-03-13 01:13:23
【问题描述】:

我们正在公司中搜索不同的数据源。我们在多个数据库中有需要从我们的 Intranet 搜索的信息。全文搜索 (FTS) 的初步实验证明令人失望。我们已经实现了一个自定义搜索引擎,非常适合我们的目的。但是,我们希望确保我们做的是“正确的事情”,并且不会错过任何可以让我们的工作更轻松的出色工具。

我们需要什么:

  1. 列搜索
    • 能够按列搜索
    • 我们标记表中的哪些列是可搜索的
  2. 在 db 列和数据之间保持某种关系
    • 我们提供对结果的高级过滤
    • 促进(亚马逊风格)过滤
    • 通过结果分组提供过滤器,并允许用户通过复选框对其进行过滤
    • 这是一个很棒的功能,用户非常喜欢它
  3. 部分字匹配
    • 我们有很多唯一标识符(产品 ID 等)。
    • 唯一 ID 可以包含具有含义的子部分(位置等)
    • 或者只有一部分可用(当用户搜索时)
    • 或者(由于设计决定很糟糕)id 中可能有空格
    • 这是我们现在通过 CHARINDEX (MSSQL) 和 INSTR (ORACLE) 实现的一项主要功能
    • 与全文相比,使用 char 索引函数在 MSSQL 上的性能相当 (+/-)
    • 没有在 Oracle 上测试
    • 但是,对这两种类型的数据库的搜索速度非常
    • 我们利用索引 (MSSQL) 和物化 (Oracle) 视图来提高速度
      • 这是一个巨大的胜利,Oracle 物化视图优于 MSSQL 索引视图
      • 两者都在只读连接情况下提供加速(例如搜索组合公司和产品)
    • 符合用户对范式 CTRL-f 期望的搜索 -> 输入文本 -> 查找匹配项
    • 全文搜索在这方面不是最好的(匹配缓慢且不一致)
    • 部分匹配(参见“部分单词匹配”)

很高兴拥有:

  1. 实时搜索数据库
    • 跳过索引跳过,这不是硬性要求
  2. 拼写建议

我们不需要的:

  1. 我们不需要索引文档
    • 此时搜索我们的数据源是最重要的事情
    • 即使我们搜索文档,我们也会寻找部分词匹配等
  2. 排名
    • 我们自己的简单排名算法已证明比 FTS 等效算法好得多。
    • 用户理解它,我们理解它,它几乎总是相关的。
  3. 词干
    • 只是不需要 [run|ran|running]
  4. 高级搜索运算符
  5. 全文搜索
    • 我们发现结果并不总是对用户“有意义”
    • 使用 FTS 进行搜索很难调整(哪组运算符符合用户的期望)
    • 高级搜索运算符是不行的
    • 我们不需要它们,因为
    • 用户不理解他们
    • 性能与 char 索引函数非常接近 (+/1)
    • 但结果有时只是“奇怪”

问题: 有没有一种解决方案,可以让我们保留键值对“过滤功能”,提供特定列匹配、部分单词匹配和其他功能,而无需进行全文搜索?

我愿意接受任何建议。我想知道文档/哈希表 nosql 数据存储(MongoDB 等)是否有用? (http://www.mongodb.org/display/DOCS/Full+Text+Search+in+Mongo)。任何与这些相关的经验都值得赞赏。

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

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

【问题讨论】:

    标签: sql-server oracle search full-text-search search-engine


    【解决方案1】:

    Apache Solr 是开始项目的好方法,它是开源的。您还可以尝试 Elastic Search,有很多现成的产品提供了良好的自定义能力和搜索功能,例如 Coveo、SharePoint Fast、Google ...

    【讨论】:

      【解决方案2】:

      我最终编写了自己的代码。

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

      真的没那么难。只是花了一些时间。

      特点:

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

      你可以用字典和大量内存来做这件事真是太神奇了。

      【讨论】:

        【解决方案3】:

        对于现成的解决方案:您查看过Google Search Appliance 吗?

        引自 Google Mini/GSA 网站:

        ...如果您需要直接建立数据库索引,我们建议您考虑使用具有直接数据库连接功能的 Google Search Appliance。

        当然,它会以您期望的 Googly 方式索引所有其他内容。

        【讨论】:

        【解决方案4】:

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

        http://lucene.apache.org/solr/

        【讨论】:

        • 关于如何使用 solr 进行部分单词匹配的任何建议?
        • 我相信它接受带有 ? 的通配符或者 * 虽然我上次看它已经有一段时间了。
        猜你喜欢
        • 1970-01-01
        • 2010-10-27
        • 1970-01-01
        • 1970-01-01
        • 2021-10-24
        • 1970-01-01
        • 2015-05-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多