2012-08-08 2 views
0

J'ai mis en place un système de tags many-to-many, et maintenant je veux effectuer une recherche en texte intégral. Le problème est AND ne fonctionne pas. Si je recherche un élément avec les termes de recherche tag1 AND tag2 AND tag3, je n'obtiens aucune ligne même si mon enregistrement est marqué par les trois balises. Pour résoudre ce problème, j'ai essayé une fonction scalaire pour concaténer mes tags et les encapsuler dans une vue. Toutefois, cela a échoué avec l'erreur suivante:Recherche FullText sur les relations plusieurs-à-plusieurs

Cannot create index on view "view" because function "dbo.GetTags" referenced by the view performs user or system data access.

J'ai restreint ma recherche Ors seulement, mais je maintenant un autre Many-to-many qui a des informations supplémentaires dans le tableau join que je veux aussi recherche sur et qui nécessite un AND.

Les seules options auxquelles je peux penser sont unioning un groupe de inner joins ou en utilisant des déclencheurs.

Est-ce que quelqu'un a de l'expérience ou des conseils pour résoudre ce problème?

Répondre

0

Si vous recherchez des balises, pouvez-vous effectuer une recherche avec l'opérateur like? Ou y a-t-il une raison pour laquelle vous avez besoin d'une recherche en texte intégral?

Sinon à utiliser la recherche en texte intégral dans un et les balises de recherche de la mode, en supposant que vous stockez une étiquette par ligne dans votre modèle de données d'étiquette, deux idées:

  1. Pause votre recherche en texte intégral dans 1 requête par recherche en texte intégral. Donc, s'il y a 3 et conditions, créez 3 requêtes de recherche en texte intégral séparées par condition ET

  2. Déterminez comment concaténer toutes les étiquettes dans une liste délimitée par des virgules. Stocker la liste délimitée par des virgules dans votre modèle de données, peut-être dans la table qui contient les données réelles, pas les balises. Comme vous pensez, vous pouvez utiliser un déclencheur pour stocker les valeurs. Exécutez ensuite votre opération de recherche de texte intégral sur cette colonne plutôt que sur votre modèle de marquage. Cette option est une solution à ne pas être en mesure de créer une vue indexée en raison de l'appel de fonction dans votre vue

Option 2 peut faire mieux que l'option 1, mais il faudrait plus de stockage.

+0

Déclenche l'action. –