我将用一个例子来解释我的问题:
我即将为酒店创建预订网站。酒店拥有1000间客房。可用性可能会从一分钟变为分钟,价格也是如此,因为这取决于可用性。
现在,我正在考虑使用Solr作为网站的搜索引擎,因为它提供了很多功能,而且开箱即用#34;。对于初学者来说,它提供了我需要的过滤和分面功能。
然而,一个主要的问题是我应该如何处理可用性和价格。我总是可以每天一次为每个房间产生一个价格,从前一天的Y天开始,提前X天。这意味着,如果我希望客户可以选择从今天起和今天365天之后的任何一天从1天到14天之间预订房间,那将导致大量计算。这似乎不是一种有效的方法。
有没有办法可以插一个自定义的价格计算器"进入索尔?我认为Solr可以保持"静态"房间数据,如床的数量和房间大小,然后插上一个价格计算器"进入Solr,它可以透明地计算价格并简单地返回计算出的价格以及搜索结果响应。使用这种方法,我还可以在价格上实现过滤和分面。
这是否接近滥用Solr的意图?索尔能以任何方式做到这一点吗?
答案 0 :(得分:1)
Solr以索引为中心。如果价格和可用性没有编入索引,但是在运行中计算,那么搜索和过滤它们将是计算上昂贵的(=>慢)。因为Solr将被迫循环遍及整个结果,或者通过整个索引循环,而不是进行索引查找。
由于使用索引做事是系统的核心,这就是我对你的问题说yes
的原因
这是否接近滥用Solr的意图?
但是有方法和方法可以做到这一点,我不建议使用它。我更愿意回答你以后的问题
索尔尔能否以任何方式做到这一点?
我会看看Solr的Near Real Time Feature。
近实时(NRT)搜索意味着文档在编入索引后几乎可以立即进行搜索:文档的添加和更新可以在'附近看到。即时的。在提交正在进行时,Solr 4不再阻止更新。在打开新的索引搜索并返回之前,它也不会等待后台合并完成。
使用NRT,您可以将提交命令修改为软提交,这可以避免标准提交的部分成本高昂。您仍然希望进行标准提交以确保文档处于稳定存储状态,但软提交可让您在此期间看到非常接近实时的索引视图。但是,请特别注意缓存和自动设备设置,因为它们会对NRT性能产生重大影响。
通过这种方式,您可以随时随地计算价格,但可以快速将价格和可用性显示在索引中。您将不得不稍微调整一下以获得最佳索引设置,但是当您仍在使用Solr时,它将付出代价。意思是。
在SO问题How to update bigger solr index efficiently和Real Time Searching of a Lucene Index that is Updated Frequently - Is this practical?
中对此进行了一些解释当然可以在网上找到更多信息