1

私の現在のプロジェクトでは、ユーザーはlike曲を検索できます。次に、ユーザーが以前に持っていた曲を検索できるように、曲検索を追加しますliked

私は以前を使用して検索エンジンを実装しましxapianた。これには、ドキュメントのインデックスを定期的に作成することが含まれます。

私の場合、すべてのユーザーの曲のインデックスを個別に作成する必要がありますか?

検索結果をもっと増やしたい場合real-time、これは、短期間にインデックスを段階的に作成する必要があることを意味しますか?

4

1 に答える 1

2

個別に質問を受け付けます。

すべてのユーザーの曲のインデックスを個別に作成する必要がありますか?

いいえ; この種の状況の一般的な手法はlike、曲に関する情報とユーザーの識別子の両方を使用して、それぞれに個別にインデックスを付けることです。次に、検索するときに、実際にログインしているユーザーIDでユーザーの自然テキスト検索の結果をフィルタリングする必要があります。

Xapianでは、これを行うには、ユーザーを表す用語を追加し(適切なプレフィックスが付いているXU175ため、ID 175のユーザーがいる可能性があります)、OP_FILTERログインしたユーザーが好きなものだけを検索するように制限します。 。

[リアルタイムのインデックス作成をサポートするために]短期間にインデックスを段階的に作成する必要がありますか?

これは、使用している検索システムに完全に依存します。Xapianを使用すると、それを実行して、生成されたデータベースを1つのベースデータベースに定期的に「圧縮」することができます。または、データベースにライブでインデックスを作成することもできます。Xapianはシングルライターであるため、新しいいいねをキューに入れて、それらをポップしてインデックスを作成する単一のプロセスを作成するなど、これをシリアル化する方法を見つけたいと思います。データベースに。これに対する主に既成の解決策の1つは、Xapian開発者の1人によって作成されたRestposeを使用することです。これは、 SolrLuceneに対して行うのと同じ種類の役割を果たします。

また、あるデータベースにインデックスを付け、それを別のデータベースに複製し、複製されたバージョンを検索することで、より洗練されたものにすることができます。これにより、将来的に水平方向にスケーリングするオプションも提供されます。Xapianのドキュメントにレプリケーションに関する説明があります。

于 2012-03-10T17:04:12.053 に答える