嘿,
我注意到使用 Java 和 PHP 查询 Solr 时存在一些差异。该查询如下所示:
text:(www)+timestamp:[2012-04-16T00:00:00Z TO 2012-04-20T23:59:00Z]&q.op=AND&rows=0&sort=timestamp%20desc&facet=true&facet.field=terms_nouns_lemma&facet.limit=20&facet.method=enum
打印出 Java 中找到的文档数量时
response.getResults().getNumFound()
我得到了将近 80.000,在 PHP 中也是如此
$response->response->numFound
返回大约 7000。PHP 结果似乎更准确,因为只需要考虑时间范围(并且由于存储文档的性质)。但是,当我进入管理页面并插入查询时,我再次得到大约 80.000(它实际上与 Java 的值相同)。
我在这里缺少什么?
在我看来,Java 根本不考虑时间范围?也许值得一提的是,我使用的是 Solr 3.5(Java 库 SolrJ 是相应的版本)
注意 我认为this问题非常相关,但它没有回答我的问题,因为它没有考虑限制(如上面查询中的时间范围)。
另外 在 PHP 中,如果我没有设置我想要在响应中包含的行数,它实际上会返回找到的正确文档数量,Java w/SolrJ 中是否有等效项(默认情况下,如果未设置 row,它将设置为 10,将其设置为 -1 也不起作用)
感谢您的任何提示
更新
正如下面的评论中所发布的,查询中的区别在于 SolrJ 用“+”替换了空格/空格,我尝试对其进行硬编码并使用 ClientUtils.escapeQueryChars(String) 进行转义,但两者均未按预期工作
真正有趣的是:
text:(www)&facet.range=timestamp&f.timestamp.facet.range.end=2012-04-16T21:59:59.000Z&f.timestamp.facet.range.gap=+1MINUTE&rows=0
返回与
相同数量的文档text:(www)
最佳答案
您是否已验证针对 solr 索引执行的查询对于 SolrJ 和 PHP 查询是否相同?特别是考虑到您说 SolrJ 查询不受您指定的日期范围的限制。这会让我怀疑 SolrJ 没有正确设置/传递某些内容。
此外,关于返回所有行,您可以将 SolrJ 中的行设置为一个大得离谱的数字(大约 100,000),在这种情况下,根据您的计数,应该对您有用。
关于java - Solr(php 与 java): query differences when determining number of documents,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10805118/