Solr/Lucene 有没有办法返回所选文档的排名而不是完整结果?

Posted

技术标签:

【中文标题】Solr/Lucene 有没有办法返回所选文档的排名而不是完整结果?【英文标题】:Is there a way for Solr/Lucene to return the ranks of selected documents instead of full results? 【发布时间】:2011-12-16 23:19:12 【问题描述】:

我有兴趣使用查询 q 查询 Solr,并在 10、20、30、... 个文档出现时绘制一组文档 D 的召回率图表返回。

目前,我有完整的结果,即返回的 docid 列表(通过 solrpy),并遍历它以找到 D 的排名,即来自 D 到他们在搜索结果中的索引。我不严格要求映射,只要求映射等级。

有没有办法让 Solr/Lucene 返回一组 ID 而不是完整结果的排名?

解决此问题的其他方法:

对于查询,返回文档的排名d 对于达到指定等级的查询,返回文档 d 是否存在 从一个查询q1结果到指定的记录数,返回另一个查询q2匹配的记录数

【问题讨论】:

为这样一个不寻常的问题 +1。请问您打算解决什么问题?\ 一般来说,我想绘制 Solr 在不同查询下对所选文档的召回率。更具体地说,我正在分析为计算语言学工作收集的数据,其中包括为语言受限的查询寻找最佳文章。我需要能够构建不同的查询并确定它们解决我的问题的效果。 嗯,使用 Lucene 库似乎更好。 【参考方案1】:

不,我想不出 SOLR 或 Lucene 的方式来做到这一点。 我认为这里最简单的解决方案是自己用一个简单的 HashSet 编程......

【讨论】:

哈希有什么帮助?假设我通过对一个字段进行排序来查询索引,并且我想知道某个文档在列表中的排名。 这可能是您已经在做的事情:将所有 D 的 codID 放入一个 (HashSet) 集中,然后遍历 SOLR 结果集并检查 ID 是否在您的集中。如果您要深入研究结果集(许多页面),请使用 SOLR 游标。【参考方案2】:

您可以通过score 字段检索排名。

附加 &fl=KeyFieldName,score 以检索文档 ID 并为您的查询评分。如果您需要所有字段,请将 &fl=*,score 添加到您的查询中。

详情请见http://wiki.apache.org/solr/SolrRelevancyFAQ#How_can_I_see_the_relevancy_scores_for_search_results。

【讨论】:

分数字段为我提供了比我需要的更多信息。我实际上并不需要列表结果,我只需要知道特定结果出现的排名。因此,&fl=KeyFieldName 足以让我查看结果。但是,如果有数千个结果,那么从服务器传回的信息比需要的信息要多得多,只是为了知道某个 KeyFieldName 值出现在什么等级。

以上是关于Solr/Lucene 有没有办法返回所选文档的排名而不是完整结果?的主要内容,如果未能解决你的问题,请参考以下文章

如何标准化 solr/lucene 分数?

lucene vs solr 评分

选择 solr/lucene 提交策略

Apache Solr - Lucene - 邮政编码半径搜索

如何使用 Solr/Lucene 搜索值列表?

Solr/Lucene 查询词形还原与上下文