要求提供搜索方法的建议
本文关键字:方法 搜索 | 更新日期: 2023-09-27 18:19:29
我把这个问题交给"更大的创造力",寻求一些关于搜索方法的建议,以解决这个问题。我想出了一个有点做作的例子,试图很好地解释这个问题,从而提出一些解决方案。
问题是:我们使用的是关系数据库(MSSQL),需要在具有以下限制的产品之间进行搜索:
- 可用性
- 市场
- 价格
我们还需要对-价格-市场-较大实体汇总
让我看看我是否可以解释使用半真实世界实体:
想想一个允许用户搜索他们可以预订的酒店房间的应用程序。以下条件可能可用于搜索:-预订房间的天数-他们想要酒店房间的市场(纽约、波士顿等)-酒店房间可能有的设施(热水浴缸、壁炉-床位数量-套房或非
在所有情况下,可以选择也可以不选择上面的搜索标准。因此,可以进行非常广泛的搜索(在这些日期,不在乎哪个市场)或不同程度的特定性(在纽约,有两张床,带壁炉)。
为了增加复杂性,我们还需要返回所选标准的酒店客房价格。显然,特价,不同天数的住宿价格不同(周四晚上一个价格,周五和周六晚上周末住宿不同价格)。
我们玩过的一些东西是:-Solr-恩德卡-SQL查询-在C#代码中实现并在必要时/必要时进行优化(想想Decorator Pattern)
我在这里寻找的是来自社区的一些建议-以上哪项不适合此问题-哪一个可能非常适合这个问题-还有哪些技术可能比我们没有想过的更有效-其他人在类似问题上使用的技术效果良好(非技术特定)
提前感谢您的任何想法或建议。我将尝试对这个问题应用适当的标签,但我是开放的,可以添加/删除来帮助正确的头脑。
您所描述的内容可以归结为具有属性的实体。我花了很多时间在类似的问题上,在我的案例中,实体的产品和属性可以是任何东西(例如类别、条件、价格、颜色等)。产品不必共享属性,尽管有一个共同的集合。
我最终得到的解决方案是使用lucene(在我的情况下是.net)。然而,我建议你使用Solr,因为它更容易使用它的过滤功能(有一个特定的原因我不能使用它,但它可能是更容易的解决方案…尽管它很容易在Lucene.net上启动和运行)。然后设计一些对象,你可以将其传递给你的搜索代码,其中列出了人们正在搜索的属性以及他们想要筛选的值。之后,使用该对象在Lucene中构建一个查询非常容易,可以检索你想要的文档。
如果需要的话,实现分页是相对琐碎的。我发现Solr的一个优点是它可以很容易地计算属性组(例如,我可以搜索"Nikon",并且除了返回所有带有"Nikon’"的文档外,它还可以对属性进行分组,例如不同的类别或不同的颜色……你可以用Lucene来做这件事,但它需要更多的工作)。
在考虑了各种搜索选项后,我选择了Lucene,花了相当多的时间使用SQL Server的搜索功能来实现该功能,但我发现Lucene更快,而且它看起来减轻了我的DB服务器的负载(我收集到Stack OverFlow本身从使用SQL Server搜索转移到了Lucene)Stack OverFlow search