La meilleure façon de mettre en œuvre une procédure stockée avec recherche en texte intégral
-
22-08-2019 - |
Question
Je voudrais lancer une recherche avec MSSQL moteur plein texte où étant donné l'entrée utilisateur suivant: "Carré Hollywood"
Je veux que les résultats ont à la fois Hollywood et carré [s] en eux.
Je peux créer une méthode sur le serveur Web (C #, ASP.NET) pour produire dynamiquement une instruction SQL comme ceci:
SELECT TITLE
FROM MOVIES
WHERE CONTAINS(TITLE,'"hollywood*"')
AND CONTAINS(TITLE, '"square*"')
Assez facile. Cependant, je voudrais que cela dans une procédure stockée pour bénéficier de la vitesse ajoutée et de la sécurité pour l'ajout de paramètres.
Puis-je avoir mon gâteau et le manger aussi?
La solution
Je suis d'accord avec ci-dessus, regardez dans ET clauses
SELECT TITLE
FROM MOVIES
WHERE CONTAINS(TITLE,'"hollywood*" AND "square*"')
Cependant, vous ne devriez pas avoir à diviser les phrases d'entrée, vous pouvez utiliser la variable
SELECT TITLE
FROM MOVIES
WHERE CONTAINS(TITLE,@parameter)
par la voie rechercher le terme exact (contient) rechercher un terme dans l'expression (texte libre)
Autres conseils
La dernière fois que je devais le faire (avec MSSQL Server 2005) J'ai fini par déplacer toute la fonctionnalité de recherche vers Lucene (la version Java, bien que Lucene.Net existe maintenant, je crois). J'ai eu de grands espoirs de la recherche en texte intégral, mais ce problème spécifique m'a ennuyé, tellement que j'ai abandonné.
Avez-vous essayé d'utiliser l'opérateur AND logique dans votre chaîne? Je passe dans une chaîne brute à mon sproc et d'autres choses « et » entre les mots.