2010-11-11 10 views
5

C'è un modo per accedere direttamente allo stelo utilizzato nell'opzione FORMSOF() di una query di ricerca testo completo CONTAINS in modo che restituisca i gambi/inflessioni di una parola di input, non solo quelle derivazioni esistenti in un colonna di ricerca.Utilizzare SQL Server FTS Stemmer

Ad esempio, la query

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

restituisce il gambo "abbastanza" e altre inflessioni, come "più bella", se esiste nella colonna CHAR_COL. Quello che voglio è chiamare la funzione FORMSOF() direttamente senza fare riferimento a una colonna. Qualche chance?

EDIT: La query che soddisfatto le mie esigenze finito per essere

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 

richiesta l'appartenenza al sysadmin server fisso ruolo e diritti di accesso alla lo stoplist specificato.

risposta

3

No. Non puoi farlo. Non è possibile accedere direttamente a Stemmer.

È possibile avere un'idea di come funziona esaminando il codice sorgente Solr. Ma potrebbe (e immagino sarà) diverso da quello implementato in MS SQL FT.

AGGIORNAMENTO: in SQL Server 2008 R2 si può fare qualcosa di abbastanza vicino a ciò che si desidera. Un'UDF speciale con valori di tabella è stato aggiunto:

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

permette di ottenere un risultato tokenizzazione (vale a dire il risultato dopo l'applicazione di parola di rottura, il thesaurus e smettere di applicazione lista). Quindi nel caso in cui lo date "FORMSOF (....)" ti darà il risultato desiderato (beh, dovrai comunque elaborare il set di risultati). Ecco il corrispondente article in MSDN.

+0

Esattamente quello che speravo. – Laramie

Problemi correlati