2017-05-12 10 views
1

私は数千の音楽トラックのインデックスを持っています。検索のために、トラックのタイトルを昇順で返すようにします。Algoliaカスタムランクオンザフライ

また、ライブラリにトラックを追加した日時であるcreated_atフィールドもあります。即座にランクを変えてもいいですか?私は最近、私が実行しますデータベースに追加されたトラックを返したいときに

index.setSettings({ 
    ranking: [ 
    "asc(title)", 
    "asc(artist)" 
    ] 
}); 

をと::私は実行します、クエリの前に、私の正常なアーティスト/タイトル検索のためのそう

index.setSettings({ 
    ranking: [ 
    "desc(created_at)", 
    "asc(title)", 
    "asc(artist)" 
    ] 
}); 

私の質問です:これはperformantですか?各クエリでこれを行うための面がありますか?

アドバイスをいただきありがとうございます。

答えて

6

アルゴリアは、クエリ時間ではなくインデックス時にデータをソートします。そのため、方法setSettingsを使用する必要があります。このようにすると、新しい設定を行うたびにすべてのデータが使用されます。

解決策は、レプリカを使用することです。これらは、別々にソートされたマスターインデックスのコピーです。

現在地関連するドキュメントを見つけることができます。 https://www.algolia.com/doc/guides/relevance/sorting/#multiple-sorting-strategies

+0

これは非常に面倒です。実行時に昇順と降順の複数のパラメータでソートする必要があるインデックスがあります。つまり、ユーザーがデータをソートするたびに15個のレプリカを作成してインデックスを再初期化する必要がありますか?これがパフォーマンス上の理由から必要であっても、ユーザーには完全に自動で透過的でなければなりません。 – Matanya

+0

これは15個のレプリカを作成する必要があることを意味しますが、これは一度だけ行うことです。設定した設定でレプリカを設定した後は、決してそれらに触れることはありません。主索引にデータをプッシュするだけで、すべてが自動的に複製されます。ユーザーが別の属性でソートする場合、クエリ内のインデックス名を変更するだけで済みます(たとえば、InstantSearchを使用する場合は自動的です)。 –

+1

各レプリカで同じ数のレコードをクォータに追加することで、15個のレプリカを15回作成することで、多くのインデックスでそれを実行しなければならない場合、かなりのコストがかかる可能性があります。 –