Используя команду DocumentDB query playground, я работаю над типом запроса фильтра. У меня есть набор атрибутов в моих данных, которые настроены, чтобы позволить пользователю выполнять поиск по определенному атрибуту. Каждый тип атрибута становится и оператором OR, если несколько элементов выбраны из имени в коллекции name/value. Если атрибуты выбраны, которые отличаются (например, цвет и размер), это становится выражением 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% уверен, что я использую правильный запрос для выполнения, но простой, где положение на ниже которого работает в SQL возвращает ничего соответствия в или заявлений, так что я в конечном итоге с элементами из каждого «и заявление
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 - это так весело. Мне нравится этот подход ... возможно, придется посмотреть на гибрид к этому. Проблема возникнет, когда у меня есть Red и Autumn Red в качестве значений. Этот запрос может совпадать с красным на обоих. Возможно, '' filter_color ": filter_color | red, filter_color | autumn red" 'с поиском' CONTAINS (s.filter_color, "filter_color | red") 'или более простой определитель. Я попробую это и вернусь к вам. – Matty
Я добавил поле, которое содержит только весь фильтр и значения. Данные полей выглядят следующим образом: '' | filter_color | red |, | filter_color | autumn red | ... "' Я помещаю трубы вокруг полей, что упрощает сборку без проблем с совпадениями. Кроме того, у меня есть только одно дополнительное поле, которое просто используется для этого. Безумно быстро. – Matty