1

嗨,

在使用 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 是对应的版本)

注意 我认为这个问题非常相关,但它没有回答我的问题,因为它没有考虑限制(如上面查询中的时间范围)。

此外 ,在 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)
4

1 回答 1

1

您是否验证了针对 solr 索引执行的查询对于 SolrJ 和 PHP 查询是相同的?特别是考虑到您说 SolrJ 查询不受您指定的日期范围的限制。这会让我怀疑 SolrJ 没有正确设置/传递某些东西。

此外,关于返回所有行,您可以将 SolrJ 中的行设置为一个非常大的数字(大约 100,000),根据您的计数,在这种情况下应该对您有用。

于 2012-05-29T19:51:14.050 回答