2010-03-01 5 views
4

StackOverflow vous permet de rechercher des publications par tags et de filtrer par une intersection de tags, par ex. . Mais généralement, il est inefficace de récupérer ces listes de MySQL en utilisant des jointures multiples sur les tags. Quelle est la manière la plus performante d'implémenter des requêtes de tag par filtre multiple?Filtrer les messages par plusieurs tags pour renvoyer les messages qui ont tous ces tags, avec de bonnes performances

Y at-il une bonne approche NoSQL à ce problème?

Répondre

2

Dans un scénario NoSQL ou documentaire, les balises réelles font partie de votre document, probablement stockées sous forme de liste. Puisque vous avez tagué cette question avec "couchdb", je vais l'utiliser comme exemple.

document A "post" en CouchDB pourrait ressembler à:

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

Ensuite, pour générer une vue calée par tags:

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

Dans CouchDB, vous pouvez émettre un HTTP POST avec plusieurs clés, si vous le souhaitez. Un exemple est dans the documentation. En utilisant cette technique, vous seriez capable de rechercher par plusieurs tags.

Remarque: La définition de la valeur null, ci-dessus, aide à conserver les vues faibles. Utilisez include_docs=true dans votre requête si vous voulez voir les documents réels ainsi.

Questions connexes