Представления CouchDB не поддерживают фасетный поиск, полнотекстовый поиск или пересечение результатов. Плагин couchdb-lucene позволяет вам делать все эти вещи.
Технически это возможно, если вы отправляете для каждого документа каждый набор powerset тегов документа в качестве ключа. Элемент набора ключей должен быть упорядочен, и ваш запрос должен также запрашивать упорядоченные теги.
function map(doc) {
function powerset(array) { ... }
powerset_of_tags = powerset(doc.tags)
for(i in powerset_of_tags) {
emit(powerset_of_tags[i], doc);
}
}
для документа {"hello_world": {"id": 123, "tags": ["hello", "world"], "text": "Hello World"}
это выдаст:
{ key: [], doc: ... }
{ key: ['hello'], doc: ... }
{ key: ['world'], doc: ... }
{ key: ['hello', 'world'], doc: ... }
Хотя это возможно, я бы посчитал это довольно хитрым решением. Я не хочу представлять себе использование диска представлением для большего количества тегов. Я ожидаю, что количество выданных ключей вырастет как 2 ^ n.