我的问题是我在 Solr 中有 n 个可搜索的字段(比如大约 10 个),它们都被索引和存储。我想首先在我的整个索引上运行一个查询,比如 5000 个文档,平均会达到 500 个文档。接下来,我想在这 500 个文档上使用一组不同的关键字进行查询,而不是在整个索引上进行查询。
所以第一次发送查询时会生成一个分数,第二次运行查询时生成的新分数应该基于上一个查询的 500 个文档,或者换句话说 Solr 应该只考虑这 500 个文档作为全指数。
总结一下,5000 的索引将被过滤到 500,然后是 50(5000>500>50)。它基本上是过滤,但我想在 Solr 中做到这一点。
我有合理的基础知识,仍在学习。
更新:如果用数学表示,它看起来像这样:
results1=f(query1)
results2=f(query2, results1)
final_results=f(query3, results2)
我希望使用程序来完成这一点,而最终用户只会看到 50 个结果。所以刻面不是一种选择。
最佳答案
我想到了两个可能的实现。最简单的方法是将第一个查询添加到第二个查询中;
+(first query) +(new query)
如果您要过滤的第一个查询经常更改,这是一种很好的方法。如果第一个查询类似于文档类别或类似的内容,您可以从重用相同的过滤器中受益,那么过滤器查询是更好的方法,使用
fq
parameter , 就像是:q=field:query2&fq=categoryField:query1
过滤查询缓存一组要过滤的文档 ID,因此对于常用的搜索,如类别、常见的日期范围等,可以从中获得显着的性能优势(对于不常见的搜索或用户输入的搜索字符串,它可能只会产生不必要的开销来缓存结果,并用无用的结果集污染缓存)
关于search - Solr 中的多个查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17609594/