2013-11-20 5 views
2

Через представления Couchbase или любой другой метод, доступный в couchbase, можно получить результирующий набор, который будет эквивалентен SQL-запросу WHERE AND. Например, возьмите следующий SQL-запрос. Поле даты будет отметка о времени:Couchbase И возможно?

SELECT * FROM items WHERE category = 'Trips' AND visible = 'EVERYONE' ORDER BY date 

По-видимому, с видом, только первое поле сложного ключа с использованием Клавишапуска и EndKey действительно может ограничить категории. Например, в приведенном ниже представлении сложный ключ, прошедший с первым значением, как «Трипсы» для ключа запуска и завершения, ограничит набор результатов только элементами «Поездки». Только проблема в том, что следующие ключи будут сортировать данные. это правильно или я что-то упускаю?

function (doc, meta) 
{ 
    if(meta.type == "json" && doc.type == "POST") 
    { 
    emit([doc.category, dateToArray(doc.created), doc.visibility], null); 
    } 
} 

Можно ли сделать выше запрос SQL в Couchbase, который возвращает результирующий набор, где только результаты встретились два условия?

Я действительно знаю о плагине для поиска. Это обеспечит мне функциональность? Но будет ли это стоить другому кластеру серверов в производственной среде и результаты не будут доступны из-за индексации?

ответ

2

Если вам нужно именно там, где и (так же, как в вашем примере SQL) попробовать:

function (doc, meta) 
{ 
    if(meta.type == "json" && doc.type == "POST") 
    { 
    emit([doc.category, doc.visibility, dateToArray(doc.created)], null); 
    } 
} 

startkey = ['Trips', 'EVERYONE']; endkey = ['Trips', 'EVERYONE', {}] 

параметры заказа в комплексном ключе очень важно. Сначала нужно поместить все «константы», потому что дата этих документов будет различной, и все, что вы ставите после даты в сложном ключе, будет проигнорировано. Просмотрите этот thread, и вы найдете ответ о том, как работает индекс couchbase.

Итак, если вам нужно точное совпадение одним или несколькими полями, вы можете сделать это с помощью couchbase. Если вам нужно отфильтровать результаты по нескольким диапазонам (например, doc.price = 100 ... 200 и doc.category = 1..5), вам нужно 1) несколько видов и слияние приложений (плохой путь) или 2) плагин elasticsearch (лучший способ)

Смежные вопросы