如何获得与给定查询匹配的文档总数?我使用了下面的查询:
result = solr.search('ad_id : 20') print(len(result))
由于默认返回值为“10”,因此输出仅为10,但计数为4000。如何获得计数的总数?
iklwldmw1#
来自pysolr的结果对象有一个hits属性,该属性包含总命中数,而不管返回多少文档。您的解决方案实际上并不适用于具有较大数据集的任何东西,因为它要求您检索 * 所有 * 文档,即使您不需要它们或不想显示它们的内容。
hits
1rhkuytd2#
计数存储在numFound变量中。使用下面的代码:
result = solr.search('ad_id : 20') print(result.raw_response['response']['numFound'])
jdgnovmf3#
正如@MatsLindh提到的-
result = solr.search('ad_id : 20') print(result.hits)
7ivaypg94#
终于得到了答案:在查询末尾添加了rows=1000000。result = solr.search('ad_id : 20', rows=1000000)个但是如果行数大于这个值,查询中的行数应该改变。这可能是一个不好的解决方案,但是有效。如果有人有更好的解决方案,请回复。
rows=1000000
result = solr.search('ad_id : 20', rows=1000000)
fdx2calv5#
如果你只想知道满足查询的条目总数,下面是我的Python3代码(使用pysolr模块):
collection='bookindex' # or whatever your collection is called solr_url = f"http://{SOLR_HOST}/solr/{collection}" solr = pysolr.Solr(url=solr_url, timeout=120, always_commit=True) result = solr.search("*:*", rows=0); return result.hits
这将查询所有文档(“:”)--在我的例子中是315913--但是您可以缩小范围以满足您的要求。例如,如果我想知道我的书中有多少条目有title:pandas,我可以搜索(“title:pandas”,rows=0)并得到标题中有pandas的条目数41。通过设置rows=0,您可以让Solr知道它不需要为您格式化 * 任何 * 结果,而您只需要返回 meta信息,因此比设置行数的上限要高效得多。
5条答案
按热度按时间iklwldmw1#
来自pysolr的结果对象有一个
hits
属性,该属性包含总命中数,而不管返回多少文档。您的解决方案实际上并不适用于具有较大数据集的任何东西,因为它要求您检索 * 所有 * 文档,即使您不需要它们或不想显示它们的内容。
1rhkuytd2#
计数存储在numFound变量中。使用下面的代码:
jdgnovmf3#
正如@MatsLindh提到的-
7ivaypg94#
终于得到了答案:
在查询末尾添加了
rows=1000000
。result = solr.search('ad_id : 20', rows=1000000)
个但是如果行数大于这个值,查询中的行数应该改变。这可能是一个不好的解决方案,但是有效。如果有人有更好的解决方案,请回复。
fdx2calv5#
如果你只想知道满足查询的条目总数,下面是我的Python3代码(使用pysolr模块):
这将查询所有文档(“:”)--在我的例子中是315913--但是您可以缩小范围以满足您的要求。例如,如果我想知道我的书中有多少条目有title:pandas,我可以搜索(“title:pandas”,rows=0)并得到标题中有pandas的条目数41。通过设置rows=0,您可以让Solr知道它不需要为您格式化 * 任何 * 结果,而您只需要返回 meta信息,因此比设置行数的上限要高效得多。