個別に質問を受け付けます。
すべてのユーザーの曲のインデックスを個別に作成する必要がありますか?
いいえ; この種の状況の一般的な手法はlike
、曲に関する情報とユーザーの識別子の両方を使用して、それぞれに個別にインデックスを付けることです。次に、検索するときに、実際にログインしているユーザーIDでユーザーの自然テキスト検索の結果をフィルタリングする必要があります。
Xapianでは、これを行うには、ユーザーを表す用語を追加し(適切なプレフィックスが付いているXU175
ため、ID 175のユーザーがいる可能性があります)、OP_FILTER
ログインしたユーザーが好きなものだけを検索するように制限します。 。
[リアルタイムのインデックス作成をサポートするために]短期間にインデックスを段階的に作成する必要がありますか?
これは、使用している検索システムに完全に依存します。Xapianを使用すると、それを実行して、生成されたデータベースを1つのベースデータベースに定期的に「圧縮」することができます。または、データベースにライブでインデックスを作成することもできます。Xapianはシングルライターであるため、新しいいいねをキューに入れて、それらをポップしてインデックスを作成する単一のプロセスを作成するなど、これをシリアル化する方法を見つけたいと思います。データベースに。これに対する主に既成の解決策の1つは、Xapian開発者の1人によって作成されたRestposeを使用することです。これは、 SolrがLuceneに対して行うのと同じ種類の役割を果たします。
また、あるデータベースにインデックスを付け、それを別のデータベースに複製し、複製されたバージョンを検索することで、より洗練されたものにすることができます。これにより、将来的に水平方向にスケーリングするオプションも提供されます。Xapianのドキュメントにレプリケーションに関する説明があります。