0

私は初めての Rails アプリを作成していますが、Thinking Sphinx で問題なく動作しています。私はそれのほとんどを理解していますが、誰かがいくつかの概念的な質問を明確にするのを手伝ってくれるなら、それが大好きです

  1. sphinx クエリの後に検索結果を表示する場合、sphinx クエリから返される sphinx_attributes を使用する必要がありますか? または、@property.title、@property.amenities.title などの通常の Rails オブジェクトを使用する必要がありますか? 通常の Rails オブジェクトを使用すると、余分なクエリを実行することになりますか?

  2. フォーラムで、「未読の投稿」を表示したいと考えています。明らかに、これはユーザーとトピックの組み合わせごとに true/false であるため、トピックのスフィンクス インデックス内に「リーダー」ID をキャッシュする必要があると考えています。このようにして、特定の user_id のすべての未読の投稿に対してクエリをすばやく実行できます。私はこれを機能させましたが、スフィンクスインデックス間に時間遅延があるため、無意味であることに気付きました。そのため、ユーザーが未読の投稿をクリックすると、sphinx DB のインデックスが再作成されるまで未読のまま表示されます。

  3. 私はまだ開発中なので、手動でインデックス作成/再構築を行っていますが、本番環境では、再インデックス作成の標準的な時間はどれくらいですか?

  4. いくつかのテキスト フィールドを持つモデルがあります。キーワード検索のために、これらすべてを sphinx インデックスの 1 つの列に連結する必要がありますか? 確かに、これはすべての個別のフィールドにインデックスを付けるよりも高速です。

  5. トピックとは少しずれますが、疑問に思っています - @property.agents.name などのネストされたモデルにアクセスすると、パフォーマンスに影響しますか? または、プロパティがデータベースからプルされると、レールは関連するすべてのエントリを自動的に取得しますか?

4

1 に答える 1

1

各ポイントに答えるには:

  1. どちらの例でも、sphinx_attributes役に立ちません。まず、プロパティは既に読み込まれているため、追加のデータベース ヒットなしでタイトルを直接利用できます。またproperty.amenities.title、文字列の配列を扱っているため、Sphinx には概念がありません。通常、複雑な計算属性には sphinx_attributes のみを使用し、標準の列参照には使用しません。

  2. はい、その通りです。この値では遅延が発生します。

  3. データが変更される頻度によって異なります。変更はめったにないため、毎日インデックスを作成できるアプリもあれば、10 分ごとに実行するアプリもあります。データが特に変動しやすい場合は、差分を使用して (通常は Sidekiq を介して)、変更を Sphinx に数秒で反映させることを検討します。

  4. どちらの方法でも大きな違いはないと思います-これらの列のいずれかを個別に検索したい場合を除きますか? その場合は、別のフィールドにする必要があります。

  5. デフォルトでは、各プロパティのエージェントを使用すると、そのプロパティのエージェントがデータベースからロードされます (プロパティごとに 1 つの SQL 呼び出し)。複数のレコードを扱う場合にこれをより適切に管理する方法については、熱心な読み込みに関するドキュメントを参照してください。Thinking Sphinxには、基になる ActiveRecord 呼び出しにオプションを渡す機能があります。:include

于 2013-06-25T02:06:50.007 に答える