Java を使用して、関心のある一連の既知の ID 内の ID を持つ結果を Solr サーバーに照会しています。
興味のあるこれらの結果だけを取得するために考えられる最善の方法は、次のような長いクエリ文字列を作成することでした。
q=(item_id:XXX33-3333 OR item_id:YYY42-3445 OR item_id:JFDE-3838)
リクエストを行う前に、この文字列を生成queryString
します。最終的に作成したいリクエストには、1500 を超えるそのような ID が含まれています。HTTP POST を使用して、クエリを次のように作成しています。
HttpPost post = new HttpPost(url);
post.setHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");
StringEntity entity = new StringEntity(queryString, "UTF-8");
entity.setContentType("application/x-www-form-urlencoded; charset=utf-8");
post.setEntity(entity);
HttpClient client = new DefaultHttpClient();
HttpResponse response = client.execute(post);
クエリを最初の 1000 個の ID のみに制限すると、クエリは成功し、期待どおりの結果が返されます。ただし、本当に関心のある 1500 件すべてを含めるようにクエリを増やすと、次のエラーを含む HTTP 400 応答コードが返されます。
HTTP/1.1 400 org.apache.lucene.queryParser.ParseException: Cannot parse '[my query here...]
Solr クエリで OR できる ID の数に制限はありますか? 1000 を超えると失敗する別の理由はありますか? 私が実験したところ、約 1024 で失敗したため (私の ID はすべてほぼ同じ長さです)、文字または用語の制限があることを示唆しているようです。
または、探しているアイテムを別のよりスマートな方法で取得する方法について誰かが良い提案をしている場合は、それを聞いてみたい. 私のバックアップ ソリューションは、すべての項目について Solr にクエリを実行し、結果を解析して、関心のあるセットに属する項目を使用することです。そしてそれは非効率的です。