我有一个分析日志的系统。它已经使用lucene来索引数据。现在我想添加一个分布式搜索,所以选择solr。我的问题是这样的,我正在查询搜索术语“注销”。我有3类指数 - 热,冷和冷。 Hot作为当前指数存在,其中热和冷是前几天的指数。
假设查询“注销”,我没有从热门部分得到足够的结果,所以现在我必须转到温暖部分,然后搜索它。即使我没有得到所谓的温暖计数,我也必须通过冷搜索。
那么有什么方法可以通过solr乐观地做到这一点,或者我应该根据numFound参数编写我的包装器吗?总之,我想优先考虑指数,只有在没有从较高优先级指数获得足够结果的情况下,才能搜索优先级较低的指数。
答案 0 :(得分:2)
最简单的解决方案是将所有数据放在同一索引中,并使用包含数据类型的字段:hot
,warm
或cold
。然后,您可以使用edismax
并为类型的不同值赋予不同的权重。这样您就可以使用单个查询执行所有操作,但结果中始终包含所有三种类型的数据,其中hot
位于顶部,然后是warm
,然后是cold
。另一个问题是每天将hot
转换为warm
和warm
转换为cold
:此解决方案需要重新提交仅包含字段类型的所有文档,并且似乎不是你想要的。
否则,您可以在不同的solr核心上使用三个不同的索引,并在一个核心而不是其他核心之间切换客户端。这样您就必须进行多个查询。然后,您可以查看Solr CoreAdmin交换功能,将hot
切换为warm
,将warm
切换为cold
。