use*_*429 5 lucene search solr solrj solr4
我的问题是我在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)
Run Code Online (Sandbox Code Playgroud)
我希望使用程序完成此操作,最终用户只能看到50个结果.因此,分面不是一种选择.
两个可能的实现发生在我身上.最简单的方法是将第一个查询添加到第二个查询中;
+(first query) +(new query)
Run Code Online (Sandbox Code Playgroud)
如果要筛选的第一个查询经常更改,这是一种很好的方法.如果第一个查询类似于文档类别,或类似的东西,您可以从重用相同的过滤器中受益,那么过滤器查询是更好的方法,使用fq参数,如:
q=field:query2&fq=categoryField:query1
Run Code Online (Sandbox Code Playgroud)
过滤查询缓存一组文档ID以进行过滤,因此对于常用搜索(如类别,常见日期范围等),可以从中获得显着的性能优势(对于不常见的搜索或用户输入的搜索字符串,它可能只会产生不必要的开销来缓存结果,并使用无用的结果集污染缓存)
过滤查询 (fq)专门设计用于通过不进行任何分数计算来快速限制结果集。
因此,如果您将第一个查询放入 fq 参数中,将第二个得分生成查询放入普通的“q”参数中,它应该按照您的要求进行操作。
另请参阅从相反方向讨论此问题的问题。
| 归档时间: |
|
| 查看次数: |
8666 次 |
| 最近记录: |