Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Search Solr中的多个查询_Search_Solr_Lucene_Solrj_Solr4 - Fatal编程技术网

Search Solr中的多个查询

Search Solr中的多个查询,search,solr,lucene,solrj,solr4,Search,Solr,Lucene,Solrj,Solr4,我的问题是Solr中有n个字段(比如10个左右)是可搜索的,它们都被索引和存储。我想首先对我的整个索引(比如5000个文档)运行一个查询,它将平均访问500个文档。接下来,我想在这500个文档上使用一组不同的关键字进行查询,而不是在整个索引上 因此,第一次发送查询时,会生成一个分数,第二次运行查询时,生成的新分数应该基于前一个查询的500个文档,或者说SOLR应该只考虑这500个文档作为整个索引。 为了总结这一点,5000的索引将被过滤到500,然后再过滤到50(5000>500>50)。它基本

我的问题是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)
text:"roses are red" AND _query_:"type:poems"

我想这是完成使用程序和最终用户将只看到50个结果。因此,刻面不是一个选项。

应该看看Solr的“刻面搜索”:这将帮助您进行这种“迭代”搜索。

我相信您希望使用这样的嵌套查询:

results1=f(query1)
results2=f(query2, results1)
final_results=f(query3, results2)
text:"roses are red" AND _query_:"type:poems"
您可以在此处阅读有关嵌套查询的更多信息:


我想到了两种可能的实现方式。最简单的方法是将第一个查询添加到第二个查询中

+(first query) +(new query)
如果要筛选的第一个查询经常更改,那么这是一种很好的方法。如果第一个查询类似于文档类别,或类似的查询,您可以从重复使用同一筛选器中获益,那么使用筛选器查询是更好的方法,例如:

q=field:query2&fq=categoryField:query1
筛选查询缓存一组要筛选的文档ID,因此对于常用的搜索,如类别、常用日期范围等,可以从中获得显著的性能优势(对于不常见的搜索,或用户输入的搜索字符串,缓存结果可能会产生不必要的开销,并使用无用的结果集污染缓存)

专门设计用于通过不进行任何分数计算来快速限制结果集

因此,如果您将第一个查询放在fq参数中,将第二个生成分数的查询放在正常的“q”参数中,它应该满足您的要求


另请参见。

嘿,thanx,我知道facet,但我不想使用它。向下钻取部分,我希望在程序中执行。最终用户只会看到最终的50个结果集,其他什么都看不到。在第一次查询之后,我希望对使用完全不同参数获得的结果执行第二次查询。thanx Gus,我认为这是一个错误很好的方法满足了我的要求,我正在探索更多的方法,将做一些测试,看看它是如何工作的。我感谢你的帮助。Thanx Alexandre,根据我最初的测试,我可以说它确实解决了我的问题。我也看到所花费的时间比Gus的解决方案要少得多。你和Gus的解决方案的结合应该可以解决我的问题我很高兴。