SOLR - 使用group.limit对结果进行分组返回错误的numFound

时间:2013-12-25 18:30:22

标签: solr lucene search-engine solr4

当我使用分组结果进行搜索并执行组限制时,我得到的numFound与我不使用限制时的相同。

看起来SOLR首先执行搜索并计算numFound然后限制结果。

我不能使用分页和其他东西。 是否有任何解决方法或我错过了什么?


示例:

======================================
| id |  publisher | book_title      |
======================================
| 1  | A1         | Title Book      |
| 2  | A1         | Book title 123  |
| 3  | A1         | My book         |
| 4  | B2         | Hi book title   |
| 5  | B2         | Another Book    |

如果我执行查询:

q=book_title:book
&group=true 
&group.field=publisher 
&group.limit=1
&group.main=true 

我会获得 numFound 5 ,但结果只有 2

"response": {
    "numFound": 5,
    "docs": [
        {
            "book_title": "My book",
            "publisher":  "A1"
        },
        {
            "book_title": "Another Book",
            "publisher":  "B2"
        }
    ]
}

4 个答案:

答案 0 :(得分:4)

将group.ngroups设置为true。 这将产生

"grouped": {
"bl_version_id": {
  "matches": 53,
  "ngroups": 18,
  "groups": [
    {
...

答案 1 :(得分:1)

我遇到了同样的问题,无法找到修复根本原因的方法,但我会将此解决方案作为解决方法分享。

我做的是

  1. 我正在分组的领域。
  2. 计算唯一方面的数量。这将匹配唯一文档的数量(在您的情况下为2)
  3. 将这些分面参数添加到您的查询中:

    &facet=true
    &facet.limit=-1
    &facet.field=publisher
    

    注意:

    • 这有点贵,但这是对我有用的唯一方法(到目前为止)。
    • 这仅适用于发布商多值
    • 的情况

答案 2 :(得分:1)

group.limit不是真正的限制,它只返回NumRows。

对于我的问题,Solr没有简单的解决方案。

你可以在这里找到答案 Solr User Group

答案 3 :(得分:-1)

numFound 是指执行查询后solr找到的文档总数,这也是您根据该查询需要进行分页的内容。

solr中的分页非常类似于使用常规RDBMS处理它,您需要使用startrows参数,例如,执行以下查询将导致获取从文件编号20开始的10份文件:

?q=you_key_word&start=20&rows=10

此查询将为您提取目标页面所需的内容“在这种情况下,这将生成第3页,假设您有10个文档/页面”,当然,而不是执行另一个查询来获取总数要知道页数的文件,你可以自动为你生成这个信息,用“numFound”的值表示。

希望这有帮助