すべての「データ」を含むOracleデータベースと、このすべてのデータにインデックスが付けられたSolrインデックスがあります。理想的には、次のようなクエリを実行できるようにしたいと考えています。
select * from data_table where id in ([solr query results for 'search string']);
ただし、重要な問題が 1 つあります。Oracle は、「in」句のアイテムの配列に 1000 を超えるアイテムを許可しません (私が見つけるオブジェクトのリストは非常に頻繁に 1000 を超え、通常は約 50- 20万アイテム)
コンマ区切りの値の文字列を取り、それらを配列項目に分割する「分割」関数を使用してこれを回避しようとしましたが、SQL (PL/SQLは 32k 文字ですが、場合によっては 80,000 以上の結果を得るにはまだ制限が多すぎます)
WHERE IN (....) を使用してパフォーマンスの問題も発生しています。参照されているフィールドがインデックス付きフィールドであっても、これによりクエリが非常に遅くなると言われています。
1000 項目の制限 (別名: id in (1...1000 または (id in (1001....2000)) または id in (2001....3000)) に対して再帰的な「OR」を作成しようとしました)) - これは機能しますが、非常に遅いです。
Solr クライアント JAR を Oracle にロードし、solr を呼び出して結果をパイプラインでリストに戻す Oracle 関数を Java で記述して、次のようなことができるようにする必要があると考えています。
select * from data_table where id in (select * from table(runSolrQuery('my query text')));
これは非常に難しいことが証明されており、それが可能かどうかさえわかりません。
私ができないこと:
- 完全なデータを Solr に保存する (セキュリティ + ストレージ制限)
- ページネーションと順序付けのコントローラーとしてSolrを使用します(これが、DBからデータを取得している理由です)
そのため、Solr が実際に Oracle の全文検索プロバイダーのように機能するハイブリッド アプローチを考案する必要があります。ヘルプ!誰かがこれに直面しましたか?