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.
Je voulais dire exactement une telle approche sous "champs concat manuellement". Ça marche, mais ça a l'air idiot. :) – XOR
Il peut sembler laid mais c'est vraiment le moyen de le faire. –