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では、応答に含める行数を設定しないと、実際に見つかったドキュメントの正しい量が返されます。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)
4

1 に答える 1

1

solrインデックスに対して実行されているクエリがSolrJクエリとPHPクエリの両方で同じであることを検証しましたか?特に、SolrJクエリが指定した日付範囲によって制限されていないと言っていることを考えると。それでは、SolrJから何かが正しくセットアップ/渡されていないのではないかと疑うことになります。

また、すべての行を返すことに関しては、SolrJ内の行を非常に大きな数(約100,000)に設定できます。この場合、カウントに基づいて機能します。

于 2012-05-29T19:51:14.050 に答える