2010-03-01 2 views
4

StackOverflow позволяет вам искать сообщения по тегам и позволяет фильтровать путем пересечения тегов, например. ruby x mysql x tags. Но, как правило, неэффективно извлекать такие списки из MySQL, используя объединения mulitple по меткам. Каков более эффективный способ реализации запросов по каждому тегу?Фильтровать сообщения по нескольким тегам, чтобы возвращать сообщения, которые имеют все те теги, с хорошей производительностью

Есть ли хороший подход NoSQL к этой проблеме?

ответ

2

В сценарии, ориентированном на NoSQL или документа, у вас будут фактические теги как часть вашего документа, вероятно, сохраненные в виде списка. Поскольку вы отметили этот вопрос с помощью «couchdb», я буду использовать его в качестве примера.

"после" документ в CouchDB может выглядеть следующим образом:

{ 
    "_id": <generated>, 
    "question": "Question?", 
    "answers": [... list of answers ...], 
    "tags": ["mysql", "tagging", "joins", "nosql", "couchdb"] 
} 

Затем, чтобы создать представление заклиненного по тэгам:

{ 
    "_id": "_design/tags", 
    "language": "javascript", 
    "views": { 
     "all": { 
     "map": "function(doc) { 
      emit(doc.tags, null); 
     }" 
     } 
    } 
} 

В CouchDB, вы можете выдать HTTP POST, с многократным ключи, если хотите. Пример: the documentation. Используя этот метод, вы сможете выполнять поиск по нескольким тегам.

Примечание: Установка значения, равного нулю, выше, помогает сохранить представление небольшим. Используйте include_docs=true в вашем запросе, если вы хотите увидеть и фактические документы.

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

  • Нет связанных вопросов^_^