要求提供搜索方法的建议

时间:2012-01-05 18:04:15

标签: c# sql search solr endeca

我正在向“更大的创造力”提出这个问题,以寻找可能解决这个问题的搜索方法的一些建议。我想出了一个有点人为的例子来试图解释这个问题,以便推荐一些解决方案。

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

  • 状况
  • 市场
  • 价格

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

让我看看我是否可以解释使用半真实世界的实体:

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

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

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

我们玩过的一些事情是: - 索尔 - 恩德卡 - SQL查询 - 使用C#代码实现并优化何时/必要时(想想装饰器模式)

我在这里寻找的是社区的一些建议 - 以上哪项不适合此问题 - 哪个可能适合这个问题 - 哪种其他技术可能更好用,我们没有考虑过 - 其他人用于类似问题的技术(非技术特定的)

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

1 个答案:

答案 0 :(得分:1)

您所描述的内容归结为具有属性的实体。我花了很多时间在一个类似的问题上,在我的情况下,产品和属性可以是任何东西(例如类别,条件,价格,颜色等)。产品没有共享属性,虽然有一个共同的集合。

我最终得到的解决方案是使用lucene(在我的情况下是.net)。但是我建议你使用Solr,因为它更容易使用它的过滤功能(有一个特定的原因我不能使用它,但它可能是更容易的解决方案......虽然它很容易起床和运行Lucene.net)。基本思想是您使用属性作为属性创建文档。然后设计一些可以传递给搜索代码的对象,该代码列出了人们在要筛选的值上搜索的属性。之后,使用该对象很容易在Lucene中构建一个检索所需文档的查询。

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

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