DocumentDB query playgroundを使用して、フィルタタイプのクエリを作成しています。私は、ユーザーが特定の属性で検索できるように設定されたデータ内に一連の属性を持っています。名前/値コレクション内の名前から複数の項目が選択されている場合は、各属性タイプとORステートメントになります。異なる属性(すなわち、色およびサイズ)が選択された場合、これはANDステートメントになります。配列のDocumentDB複数のフィルタクエリ
SELECT food.id,
food.description,
food.tags,
food.foodGroup
FROM food
JOIN tag1 IN food.tags
JOIN tag2 IN food.tags
WHERE (tag1.name = "snacks" OR tag1.name = "granola bars")
AND (tag2.name = "microwave")
このクエリはplaygroundで美しく機能します。
主な問題は、最大12個の属性があり、それ以上の属性があることです。一度私が5つのジョインをヒットしたら、これは私のmaximum allowedジョインの数なので、以下のクエリは機能しません。 (これは遊び場データではないことに注意してください、私自身のサンプル)
SELECT s.StyleID FROM StyleSearch s
JOIN a0 in s.Attributes
JOIN a1 in s.Attributes
JOIN a2 in s.Attributes
JOIN a3 in s.Attributes
JOIN a4 in s.Attributes
JOIN a5 in s.Attributes
WHERE (a0 = "color-finish|Grey" OR a0 = "color-finish|Brown" OR a0 = "color-finish|Beige")
AND (a1 = "fabric-type|Polyester" OR a1 = "fabric-type|Faux Leather")
AND (a2 = "design-features|Standard" OR a2 = "design-features|Reclining")
AND (a3 = "style_parent|Contemporary" OR a3 = "style_parent|Modern" OR a3 = "style_parent|Transitional")
AND (a4 = "price_buckets|$1500 - $2000" OR a4 = "price_buckets|$2000 and Up")
AND (a5 = "dimension_width|84 in +")
私はこれを実行するには、適切なクエリを使用しています100%確実ではないけど、して動作し、以下のあたりのシンプルなwhere句SQLは、私はそれぞれの「AND声明からのアイテムで終わるように、または文で一致するものを持ち帰るここ
SELECT s.StyleID FROM StyleSearch s
JOIN a in s.Attributes
WHERE (a = "color-finish|Grey" OR a = "color-finish|Brown" OR a = "color-finish|Beige")
AND (a = "fabric-type|Polyester" OR a = "fabric-type|Faux Leather")
AND (a = "design-features|Standard" OR a = "design-features|Reclining")
AND (a = "style_parent|Contemporary" OR a = "style_parent|Modern" OR a = "style_parent|Transitional")
AND (a = "price_buckets|$1500 - $2000" OR a = "price_buckets|$2000 and Up")
AND (a = "dimension_width|84 in +")
は、データの例です。
{
"StyleID": "chf_12345-bmc",
"Attributes": [
"brand|chf",
"color|red",
"color|yellow",
"dimension_depth|30 in +",
"dimension_height|counter height",
"materials_parent|wood",
"price_buckets|$500 - $1000",
"style_parent|rustic",
"dimension_width|55 in +"
]
}
私は適切な方法を探しています手にそれで前もって感謝します。
のNoSQLに使用を取得するとき、私は余分な列に使用です。 =)DateTimeフィールドは非常に面白いです。私はこのアプローチが好きです...これにハイブリッドを見なければならないかもしれません。問題は、私が赤と秋の赤を価値として持っているときに起こります。そのクエリは、両方で赤と一致する可能性があります。 "CONTAINS(s.filter_color、" filter_color | red ")'またはよりシンプルな修飾子で '' filter_color ":" filter_color | red、filter_color | autumn red "私はこれを試して、あなたに戻ってきます。 – Matty
すべてのフィルタと値だけを含むフィールドを追加しました。フィールドデータは次のようになります: '' | filter_color | red |、| filter_color | autumn red | ... ''フィールドの周囲にパイプを置くことで、また、私はこれのためにちょうど使用されている1つの追加のフィールドを持っています。非常に速い。 – Matty