Catalogue de texte intégral/index de recherche pour %livre%
Je suis d'essayer d'envelopper ma tête autour de la façon dont à la recherche de quelque chose qui apparaît au milieu d'un mot /expression - quelque chose comme de la recherche pour "COMME %livre%" - mais dans SQL Server (2005) catalogue de texte intégral.
Comment puis-je le faire? Il semble presque comme si les deux CONTAINS
et FREETEXT
vraiment ne prennent pas en charge joker à la début d'une expression de recherche - cela peut-il être?
J'aurais imaginé que FREETEXT(*, "book")
serait de trouver quelque chose avec "le livre" à l'intérieur, y compris les "remettre" ou quelque chose comme ça.
Suivez ce lien pour une classe d'assistance qui est très utile pour la FTS sur Sql Server 2005: http://ewbi.blogs.com/develops/2007/05/normalizing_sql.html
OriginalL'auteur | 2008-11-17
Vous devez vous connecter pour publier un commentaire.
malheureusement ne CONTIENT que prend en charge le préfixe des caractères génériques:
OriginalL'auteur Mitch Wheat
SQL Serveur, Recherche en Texte Intégral est basé sur la segmentation du texte en mots. Il n'y a pas d'unité plus petite qu'un mot, alors la moindre des choses que vous pouvez regarder pour sont des mots.
Vous pouvez utiliser préfixe recherches à regarder pour les matchs qui commencent avec certains personnages, ce qui est possible parce que les listes de mots sont conservés dans l'ordre alphabétique et tout le Serveur a à faire est de parcourir la liste pour trouver des correspondances.
À faire ce que vous voulez une requête avec un
LIKE '%book%'
clause serait probablement tout aussi rapidement (ou lentement).OriginalL'auteur Tomalak
Si vous voulez faire un peu de sérieux recherche en texte intégral, alors je voudrais (et avoir) utilisation Lucene.Net. MS SQL de recherche de Texte Intégral ne semble jamais bien pour autre chose que les principes de base.
OriginalL'auteur Craig
Voici une suggestion qui est une solution de contournement pour que les génériques de prescription. Vous créez une colonne calculée qui contient le même contenu, mais dans le sens inverse que la colonne(s) que vous recherchez.
Si, par exemple, vous êtes à la recherche sur une colonne nommée "ProductTitle", puis créer une colonne nommée ProductsRev. Puis mettre à jour le champ " Spécification de la Colonne Calculée valeur:
(reverse([ProductTitle]))
La " ProductsRev colonne dans votre recherche et vous devriez maintenant être en mesure de retourner des résultats qui prennent en charge un caractère générique au début du mot. Bonne chance!!
C'est créatif, mais comme l'autre commentaire l'indique, il permet seulement avec des mots qui se terminent dans la cible, pas dans les mots qui ont la cible dans le milieu. Aussi, il ressemble tellement à un data/code odeur que je pense que la mise en œuvre il est préférable d'utiliser régulièrement des " LIKE %blah%' ou la commutation de moteurs de base de données.
OriginalL'auteur Jake H.
Texte intégral a un tableau qui répertorie toutes les paroles que le moteur a trouvé. Il devrait avoir des ordres de grandeur de moins de lignes que votre texte intégral indexés sur la table. Vous pouvez sélectionner à partir de cette table ", où le champ like '%livre%' "pour obtenir tous les mots qui ont "livre". Ensuite, utilisez cette liste pour écrire un texte complet de la requête. Son encombrant, mais il pourrait fonctionner, et il serait ok dans la vitesse du département. CEPENDANT, en fin de compte que vous utilisez fulltext mal quand vous faites cela. Il pourrait effectivement être mieux informer la source de ces demandes de fonctionnalités sur ce fulltext est en train de faire. Vous voulez comprendre ce qu'il VEUT faire, de sorte qu'ils peuvent obtenir de haute valeur à partir fulltext. Exemple, utilisez uniquement des cartes sauvages à la fin d'un mot, qui signifie penser aux mots dans une liste ordonnée.
OriginalL'auteur jerry
pourquoi ne pas programmer une assemblée en C# pour calculer tous les non répété sufixes. Par exemple, si vous avez le Texte "manger de la viande rouge", vous pouvez stocker dans un champ "manger à t il e rouge ed d de la viande" (note qui n'est pas nécessaire d'ajouter à manger et t de nouveau) ind dans ce champ d'utilisation de la recherche plein texte. Une fonction pour faire ce que peut facilement écrite en Csharp
x) je sais que cela semble od... c'est un workarround
x) je sais, je suis en ajoutant les frais généraux insérer /mettre à jour .... ne se justifie que si cette surcharge est insignifiant outre l'amélioration de la fonction de recherche
x) je sais qu'il existe aussi une surcharge de la taille des données stockées.
Mais je suis assez conffident qui sera assez rapide
OriginalL'auteur Qsebas