java - Solr(php 与 java): query differences when determining number of documents

标签 java php solr lucene solrj

嘿,

我注意到使用 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/

相关文章:

java - Hazelcast 管理中心 - 成员无法沟通

php - Htaccess 和水印

php - 一次检查所有数组值

solr - Spring Data Solr : Queries with "AND", "NOT"和 "OR"未转义或处理

面向不同地域用户的日期操作/存储的 Java 最佳实践

JavaFX:GridPane 中的 ComboBox 导致不必要的大小调整

java - 无法找到 "variable might not have been initialized"错误的解决方案

php - 静态::对比self::- 有什么缺点吗?

Solr 架构策略

java - 为什么 Solrj SolrDocumentList (SolrDocument) 将数据项保存为数组 (ArrayList<>)