タグの複数値プロパティと日付フィールドを含むPhotoクラスがあるとします。
ユーザーがタグに基づいてクエリを実行できるようにしたい(複数のタグに対してAND演算子のみを使用)。
たとえば、ユーザーが雨の日を検索するとします。写真から*を選択します。ここでtag='clouds'AND tag ='rainy'
ジグザグマージはどのように機能しますか?2つのスキャンが実行され、両方の検索のキーが同じ写真を指しているかどうかに基づいて、それが返されることを知っています。しかし、これは並行して起こりますか?例:検索1はタグ「雲」を含む写真を検索しますが、検索2はタグ「雨」を含む最初の写真を検索します。両方の検索が実行されると、同期になります。次に、検索1は、S2と同じキーに到達するまでスキャンを続行します。次に、各検索のキーは同じですが、写真が返され、「カーソル」は検索ごとに1ステップに沿って移動しますか?
次に、複数のインデックスを定義すると、この種のクエリが高速化されますか?たとえば、最大4つのタグを許可する場合は、次のようなインデックスを定義する必要があります。Index(Photo)Index(Photo、tag)Index(Photo、tag、tag)Index(Photo、tag、tag、tag) Index(Photo、tag、tag、tag、tag)では、上記と同じクエリを実行する方が速くなりますか?
また、元のクエリを使用して、何百万枚もの写真に曇りのタグが付けられているが、雨のタグが付けられているのは2枚だけだとします。これは、ジグザグのパフォーマンスが比較的遅いことを意味しますか?検索の1つが一致するものを見つけようとするので、存在しますか?さらに悪いことに、100万枚の写真に「雨」のタグが付けられ、100万枚の写真に「曇り」のタグが付けられているにもかかわらず、両方のタグが含まれている写真は1枚もありません。上記のインデックスを定義すると、この問題は修正されますか?
最後に、写真に100個のタグがあるとします。それは、上記のすべてのインデックスに100個のタグのすべての組み合わせを含める必要があることを意味しますか?
私はgot-yasがあることを知っています(エンティティは5000回しかインデックス付けできず、単一の複数値プロパティは1000回しかインデックス付けできません)。