2010-01-15 6 views
0

Nous avons une table avec plusieurs champs indexés en texte intégral. Dites, c'est firstName, surName et lastName. Je cherche "John AND Smith" et évidemment ces deux mots seront probablement écrits dans différents domaines. La requête ne renvoie rien. Si je recherche "John OR Smith" cela fonctionne.Comment faire une requête en texte intégral avec ET lorsque le texte s'étend sur plusieurs colonnes

La question est: puis-je dire à SQL Server que tous les champs appartenant à une ligne de table spécifique doivent être traités comme un fragment de texte continu?

Bien sûr, je peux concaténer des champs manuellement à un champ spécial et l'indexer, mais cela semble assez idiot.

Juste au cas où, la requête. Ce n'est pas sur le nom de la personne, mais idée est la même:

SELECT [id], [type], [accessClass], [rank] 
FROM ( 
SELECT DISTINCT temp_result.* 
FROM ( 
    select SDF_Article.article_id [id], 
    6 [type], SDF_Object.accessClass [accessClass], RelevanceTable.[rank] [rank] 
    from SDF_Article inner join SDF_Object SDF_Object 
    on SDF_Article.article_id=SDF_Object.object_id 
    inner join SDF_Article_Locale SDF_Article_Locale 
    on SDF_Article.article_id=SDF_Article_Locale.article 
    inner join ContainsTable(SDF_Article_Locale, (title, body, brief), 
    'FORMSOF (INFLECTIONAL, hello) AND FORMSOF (INFLECTIONAL, world)', Language 'Russian') RelevanceTable 
    on SDF_Article_Locale.entry_id=RelevanceTable.[KEY] 
    ) AS temp_result 
INNER JOIN SDF_RelationMap SDF_Map 
ON temp_result.[id] = SDF_Map.object AND SDF_Map.ancestor = 5) 
AS result ORDER BY [rank] desc 

Nous utilisons SQL Server 2005.

Répondre

2

Une solution consiste à créer une colonne peuplée automatique qui concats les colonnes que vous souhaitez indexer et recherche. Puis pointez l'indexeur de texte intégral dans cette colonne. Ensuite, vous formez simplement votre requête autour de la nouvelle colonne.

+0

Je voulais dire exactement une telle approche sous "champs concat manuellement". Ça marche, mais ça a l'air idiot. :) – XOR

+0

Il peut sembler laid mais c'est vraiment le moyen de le faire. –

Questions connexes