Wow, je viens d'écrire un gros post et DONC étranglé et pendu sur elle, et quand j'appuie sur mon bouton de retour à la soumettre de nouveau, le balisage de l'éditeur était vide. aaargh.
Donc ici, je vais à nouveau...
Concernant un Débordement de Pile, il s'avère qu'ils utilisent SQL server 2005 de recherche de texte intégral.
Concernant le système d'exploitation des projets recommandés par @Subvention:
-
*DotNetKicks utilise la DB pour le marquage et Lucene pour la recherche de texte intégral. Il semble y avoir aucun moyen de combiner une recherche en texte intégral avec une recherche par tag
-
Kigg utilise Linq-to-SQL pour la recherche et la balise de requêtes. Les deux requêtes de jointure Histoires->StoryTags->Balises.
- Les deux projets ont un 3-approche de table de marquage comme tout le monde semble généralement à recommander
J'ai aussi trouvé quelques autres questions sur de SORTE que j'avais raté avant:
Ce que je suis en train de faire, pour chacun des points que j'ai mentionnés:
- Dans la DB, 3 tables: Entité, Tag, Entity_Tag. J'utilise la DB pour:
- Construire à l'échelle du site des nuages de tags
- parcourir par balise (c'est à dire des urls comme SI s /questions/tagged/ASP.NET)
- Pour la recherche-je utiliser Lucene + NHibernate.Recherche
- Les balises sont concat avais dans un TagString qui est indexé par Lucene
- J'ai donc toute la puissance de la Lucene moteur de recherche (ET / OU / PAS de requêtes)
- Je peux rechercher du texte et filtrer par tags dans le même temps
- La Lucene analyseur fusionne les mots pour une meilleure étiquette de recherches (c'est à dire une balise de la recherche pour "test" sera également trouver des trucs marqués "test")
- Lucene retourne un énorme potentiel de résultat, qui je paginer à 20 résultats
- Ensuite, NHibernate, charge le résultat des Entités par Id, soit à partir de la bd ou de l'Entité cache
- Il est donc tout à fait possible que les résultats de la recherche dans 0 hits de la DB
- Ne le faites pas encore, mais je pense que je vais probablement essayer de trouver un moyen de construire le nuage de tags à partir de la TagString dans Lucene, plutôt que de prendre une autre DB frappé
- Ne l'avez pas fait encore, mais je vais probablement stocker les TagString dans la DB de sorte que je puisse montrer à une Entité de la liste de balises sans avoir à en faire 2 de plus rejoint.
Cela signifie que chaque fois qu'une Entité balises sont modifiés, j'ai:
- Insérer de nouvelles Balises qui n'existent pas déjà
- Insérer/Supprimer de la table EntityTag
- Mise À Jour De L'Entité.TagString
- Mise à jour de l'index Lucene pour l'Entité
Étant donné que le rapport de lectures et d'écritures est très grand dans mon application, je pense que je suis ok avec ça. Le seul vraiment de temps est d'indexation Lucene, parce que Lucene ne peut insérer et de supprimer de son index, et donc je dois re-index de l'ensemble de l'entité afin de mettre à jour le TagString. Je ne suis pas enthousiasmé par cette idée, mais je pense que si je le fais dans un thread d'arrière-plan, il fera beau.
Le temps nous le dira...