【问题标题】:Is it possible (or wise) to use Solr for a reservation system?将 Solr 用于预订系统是否可能(或明智)?
【发布时间】:2013-03-18 09:35:19
【问题描述】:

我对 Solr 比较陌生,需要帮助来确定它是否是适合我的任务的工具(如果是,应该如何使用)。

我有一个用例,其中一些实体具有多种资源类型,用户需要找到具有足够免费资源的实体。为了不那么抽象,假设有几家汽车租赁公司和几种汽车类型(SUV、面包车、卡车......);我们跟踪每个公司/汽车类型/天组合的可用汽车数量。用户想要在给定的时间跨度内租用一定数量的汽车,我们需要找出哪些公司可以满足该请求。

搜索的其他方面,Solr 似乎很适合(每个实体都有许多属性,比如公司位置、价格、是否存在绿色租赁政策等,这些需要可搜索,并带有范围过滤器和分面搜索,并根据用户反馈分数进行排序),所以如果资源分配方面可以硬塞到 Solr 中会很好。那可能吗?出于某种原因,这是一个坏主意吗?你能推荐一个更适合这项任务的工具吗?


浏览 Solr 文档后,我想出了这个方案:

  • 公司就是文件
  • 每天/汽车类型组合是一个动态字段,其中包含该公司在给定日期的给定类型的免费汽车数量
  • 然后条件将是一个巨大的布尔表达式,由诸如field_<car_type>_<day>:[<required_number> TO *] 之类的术语组成

我不确定有几个原因:

  • 这将需要数千个字段 - 这会导致性能问题吗?
  • 据我了解,Solr 将范围查询解压缩为许多相等性检查 OR-ed 在一起,因此查询最终会包含数千个术语 - 再次,这会导致性能问题吗?
  • 每次用户进行预订时,字段值都会发生变化 - 据我了解,这将强制重新编制索引,这很慢,所以与上述问题相同。

我将不胜感激有关如何处理此问题的任何指示(例如,要使用的其他搜索工具,或者 Solr 如何与一些进行预订检查的自定义代码进行交互)。

【问题讨论】:

  • 难道你不能在你的大部分工作中使用良好的旧 SQL,并为搜索微调 Solr 索引,你可以将字段合并在一起等等。您应该能够使用 docs.lucidworks.com/display/solr/… 将数据从 SQL 导入到 solr
  • @rcomblen 我可以使用 SQL 来检查可用性,但我不希望对每个搜索请求都运行复杂的 SQL 查询。我没有看到如何将它与 Solr 集成。我要么需要运行 SQL 查询以获取具有足够资源的公司列表,然后将该列表提供给 Solr(我不知道该怎么做),要么先运行 Solr 搜索,然后过滤掉不可用的带有 SQL 的汽车(这会弄乱 Solr 数据,如分页和构面计数)。乍一看,您的链接似乎是关于从 SQL 导入文档,而不是导入每个查询过滤器的结果。

标签: solr


【解决方案1】:

您的问题似乎与酒店业和购物业所面临的问题相似。您可能会发现 the presentation from Gilt 很有帮助。

基本观点似乎是,您可能需要重新定义您的文档,使其比您最初的想法更细粒度。在您的情况下,这可能会将 availability 索引为 Solr document,并为每个可用性槽复制附加信息或使用 Solr join 运算符。

【讨论】:

  • 谢谢!幻灯片非常有趣,使用每个公司/日/类型三元组作为文档似乎是个好主意。不过,我对 Gilt 演示文稿不了解的是它们如何考虑可用性。幻灯片只是说他们有一个自定义过滤器(我假设这意味着一个用 Java 编写的 Solr 插件),它与库存服务联系。这是否意味着每次搜索结果都要调用外部服务? (示例代码似乎暗示了这一点。)这听起来非常昂贵。
  • join 运算符也很有趣,但如果我理解正确的话,它只是意味着您可以过滤共享数据(这是公司的字段,而不是公司/类型/天),但您最终只能取回子数据(例如,您可以显示来自芝加哥公司的可用汽车的结果列表,但您不能显示该公司所在的每个结果项)。这不是削弱整个事情吗?
  • 加入运算符是一个早期阶段的东西,可能并不完美。有一些关于父/子索引的工作。检查 solr-user 邮件列表以获取有关此的多个讨论。如果做得好,自定义过滤器不必非常昂贵。您可能可以在短时间内缓存、配置服务等。Solr 为您提供了可能会有所帮助的生命周期挂钩。此外,您也许可以就该演示文稿提出非常具体的问题来联系 Gilt 人。不知何故,它对他们有用(流量非常高),所以一定有办法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-13
  • 1970-01-01
  • 2010-12-17
  • 2020-10-03
相关资源
最近更新 更多