search - Solr 中的多个查询

标签 search solr lucene 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)

我希望使用程序来完成这一点,而最终用户只会看到 50 个结果。所以刻面不是一种选择。

最佳答案

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

+(first query) +(new query)

如果您要过滤的第一个查询经常更改,这是一种很好的方法。如果第一个查询类似于文档类别或类似的内容,您可以从重用相同的过滤器中受益,那么过滤器查询是更好的方法,使用 fq parameter , 就像是:
q=field:query2&fq=categoryField:query1

过滤查询缓存一组要过滤的文档 ID,因此对于常用的搜索,如类别、常见的日期范围等,可以从中获得显着的性能优势(对于不常见的搜索或用户输入的搜索字符串,它可能只会产生不必要的开销来缓存结果,并用无用的结果集污染缓存)

关于search - Solr 中的多个查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17609594/

相关文章:

spring - 带有 spring-data solr 的嵌套文档

java - Lucene有什么用?

join - Solr 4.0 是否能够将 'join"用于多核?

regex - 在在线正则表达式测试器中工作的 MariaDB 正则表达式在 SELECT WHERE REGEXP 中不起作用

java - 从 Lucene 中查找搜索命中的位置

java - Solr模式中字段的默认值可以是当前日期吗?

solr - Solr 的 Amazon EC2 实例类型

java - 多术语 solr 同义词问题

mysql - VBA 中是否有等效的 MySQL %(近似值)?

java - 如何获得数组中五个最少重复的元素