新しいサイト (ショッピング サイト) では、サイトの検索エンジンに Solr を使用します。Solr インデックスでは、製品 ID のリストと各製品のキーワードのリストを保持しています。検索クエリは、キーワードに対して実行されます。
Solr は製品 ID のリストを返します。次に、これらの ID が MySQL クエリに挿入され、データベースからすべての製品データが選択されます。MySQL は結果のソートも処理します。たとえば、MySQL クエリは次のようになります。
SELECT * FROM product WHERE id IN (1,4,42,32,46,...,39482) ORDER BY price ASC
サイトには約100,000の製品があります。この方法は、数千件の結果がある場合はうまく機能しますが、たとえば 50,000 件の結果がある場合は遅くなります。
私の推測では、ボトルネックは「WHERE IN」句です。長期的な解決策は、すべての製品データを Solr に移動して、結果の並べ替えと検索への絞り込みフィルターの適用を処理できるようにすることです (たとえば、ユーザーが特定の価格帯の製品のみを表示したい場合など)。ただし、Solr には不慣れであり、これを実装する前に短期的な修正が必要です。
1 つのオプションは、短期的には Solr を放棄し、MySQL のテーブルにキーワードを保存し、全文検索を使用してこれに対して検索を行うことです。
他のオプションがありませんか?