2010-11-11 8 views
5

Existe-t-il un moyen d'accéder directement au stemmer utilisé dans l'option FORMSOF() d'une requête de recherche de texte intégral CONTAINS pour qu'il renvoie les tiges/inflexions d'un mot d'entrée, pas seulement les dérivations qui existent dans un colonne de recherche.Utiliser SQL Server FTS Stemmer

Par exemple, la requête

SELECT * FROM dbo.MyDB WHERE contains(CHAR_COL,'FORMSOF(INFLECTIONAL, prettier)') 

retourne la tige « joli » et d'autres inflexions comme « la plus jolie » si elles existent dans la colonne char_col. Ce que je veux, c'est appeler la fonction FORMSOF() directement sans faire référence à une colonne. Une chance?

EDIT: La requête qui a répondu à mes besoins a fini par être

SELECT * FROM 
    (SELECT ROW_NUMBER() OVER (PARTITION BY group_ID ORDER BY GROUP_ID) ord, display_term 
    from sys.dm_fts_parser('FORMSOF(FREETEXT, running) and FORMSOF(FREETEXT, jumping)', 1033, null, 1)) a 
WHERE ord=1 

Nécessite l'appartenance au rôle serveur sysadmin fixe et les droits d'accès à l' antidico spécifié.

Répondre

3

Non. Vous ne pouvez pas faire cela. Vous ne pouvez pas accéder directement à stemmer.

Vous pouvez vous faire une idée du fonctionnement en regardant le code source Solr. Mais cela pourrait (et je suppose) être différent de celui implémenté dans MS SQL FT. MISE À JOUR: Il s'avère que dans SQL Server 2008 R2, vous pouvez faire quelque chose de très proche de ce que vous voulez. Une UDF a été ajouté spécial table Précieuses:

sys.dm_fts_parser('query_string', lcid, stoplist_id, accent_sensitivity) 

il vous permet d'obtenir un résultat de tokens (à savoir le résultat après la rupture des mots, thésaurus et arrêter l'application de la liste). Donc au cas où vous le feriez 'FORMSOF (....)' il vous donnera le résultat que vous voulez (bien, vous devrez traiter le jeu de résultats de toute façon). Voici correspondant article in MSDN.

+0

Exactement ce que j'espérais. – Laramie

Questions connexes