【问题标题】:Suggestions for search methodology requested [closed]要求的搜索方法建议[关闭]
【发布时间】:2012-01-05 18:04:15
【问题描述】:

我将此问题提交给“更大的创造力”,以获取有关可能解决此问题的搜索方法的一些建议。我想出了一个有点人为的例子,试图充分解释这个问题,以便推荐一些解决方案。

问题: 我们正在使用关系数据库 (MSSQL),需要在具有以下约束的产品中进行搜索:

  • 可用性
  • 市场
  • 价格

我们还需要分组和排序 - 价格 - 市场 - 更大的实体汇总

让我看看我能不能用半现实世界的实体来解释:

考虑一个允许用户搜索他们可以预订的酒店房间的应用程序。以下条件可能可用于搜索: - 预订房间的天数 - 他们想要酒店房间的市场(纽约市、波士顿等) - 酒店房间可能拥有的设施(热水浴缸、壁炉 - 床位数 - 套房与否

在所有情况下,可能会或可能不会选择上述搜索条件。因此,可以进行非常广泛的搜索(在这些日期,不关心哪个市场)或不同程度的特异性(在纽约市,2 张床,带壁炉)。

为了增加复杂性,我们还需要返回所选标准的酒店房间价格。显然,特价,不同住宿天数的不同价格(周四晚上一个价格,周末住宿周五和周六晚上一个价格)。

我们玩过的一些东西是: - 索尔 - 恩德卡 - SQL查询 - 在 C# 代码中实现并在必要时/在必要时进行优化(想想装饰器模式)

我在这里寻找的是来自社区的一些建议 - 以上哪个不适合这个问题 - 这可能非常适合这个问题 - 还有哪些我们没有想到的其他技术可能会更好地工作 - 其他人在类似问题上使用过且效果良好的技术(非技术特定)

提前感谢您提出的任何想法或建议。我将尝试对这个问题应用适当的标签,但我是开放的,可以添加/删除以帮助正确解决问题。

【问题讨论】:

标签: c# sql search solr endeca


【解决方案1】:

您所描述的归结为具有属性的实体。我在类似的问题上花了很多时间,在我的案例中,产品和属性可以是任何东西(例如类别、条件、价格、颜色等)的实体。产品不必共享属性,尽管有一个共同的集合。

我最终得出的解决方案是使用 lucene(在我的例子中是 .net)。但是我建议您使用 Solr,因为它更容易使用它的过滤功能(我不能使用它有一个特定的原因,但它可能是更简单的解决方案......虽然它很容易启动和运行Lucene.net)。基本思想是创建将属性作为属性的文档。然后设计一些对象,您可以将其传递给您的搜索代码,列出人们正在搜索他们想要过滤的值的属性。之后,很容易使用该对象在 Lucene 中构建一个查询来检索您想要的文档。

如果需要,实现分页相对简单。我发现 Solr 的一个优点是它可以轻松计算属性组(例如,我可以搜索“Nikon”,并且返回所有带有“Nikon”的文档,它可以对属性进行分组,例如不同的类别或不同的颜色....您可以使用 Lucene 来做到这一点,但它的工作量更大)。

在查看了各种搜索选项后,我选择了 Lucene,并花了相当多的时间使用 SQL Server 的搜索功能来实现该功能,但我发现 Lucene 速度更快,而且它看起来减轻了我的数据库服务器的负载(我收集Stack OverFlow 本身从使用 SQL Server 的搜索转移到了 Lucene)Stack Overflow Search

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-31
    • 1970-01-01
    • 2012-02-02
    • 1970-01-01
    • 2014-05-21
    • 2012-09-24
    • 2012-07-01
    相关资源
    最近更新 更多