やあ、
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では、応答に含める行数を設定しないと、実際に見つかったドキュメントの正しい量が返されます。Javaw / SolrJに同等のものはありますか(デフォルトでは、行がない場合)設定しないでください。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)