Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server
MS SQL-Server Forum Microsoft SQL-Server. Avant de poster -> FAQ SQL-Server, Tutoriels SQL-Server
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 11/03/2011, 07h59   #1
Modérateur

 
Avatar de elsuket
 
Homme Nicolas Souquet
Administrateur de base de données
Inscription : janvier 2005
Messages : 4 667
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Souquet
Âge : 30
Localisation : Thaïlande

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : janvier 2005
Messages : 4 667
Points : 8 715
Points : 8 715
Par défaut Recherche floue en texte intégral, sauce LIKE

Bonjour,

J'ai une table contenant quelques millions de lignes, dont une définition simplifiée est la suivante :

Code :
1
2
3
4
5
6
7
8
9
CREATE TABLE personne_recherche_nom
(
	personne_recherche_nom_id int identity NOT NULL CONSTRAINT PKperson_search_name PRIMARY KEY
	, personne_id int NOT NULL CONSTRAINT FKpersonne_recherche_nom__personne_id FOREIGN KEY (personne_id) REFERENCES dbo.personne
	, premier_nom_type int NOT NULL CONSTRAINT FKperson_search_name__premier_nom_type FOREIGN KEY (premier_nom_type) REFERENCES dbo.nom_type
	, premier_nom nvarchar(64) NOT NULL
	, second_nom_type int NOT NULL CONSTRAINT FKperson_search_name__second_nom_type FOREIGN KEY (second_nom_type) REFERENCES dbo.nom_type
	, second_nom nvarchar(64) NOT NULL
)
Je cherche à optimiser la recherche dans les noms puisque jusqu'à présent celle-ci est effectuée avec des LIKE.
Un requête type est :

Code :
1
2
3
4
SELECT	TOP 500 person_id
FROM	dbo.personne_recherche_nom
WHERE	premier_nom LIKE 'toto%'
AND	second_nom LIKE 'titi%'
J'ai fait un peu de lecture sur la recherche en texte intégral, et j'ai compris que je ne peux pas utiliser cette fonctionnalité pour accélérer la recherche.

Est-ce que je me trompe ?
Si non, avez-vous des idées ?

@++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes.
Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012
elsuket est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/03/2011, 14h47   #2
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 953
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 953
Points : 17 773
Points : 17 773
Avec IFTS de 2008 tu à accès aux tables de mots référencés et aux croisement mots/doc. Dès lors rien ne t'empêche de réaliser ta propre fonction de recherches floue...

A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/03/2011, 15h36   #3
Membre Expert
 
Avatar de iberserk
 
Homme Bruno IGNACE
Architecte de base de données
Inscription : novembre 2004
Messages : 1 299
Détails du profil
Informations personnelles :
Nom : Homme Bruno IGNACE
Âge : 30
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Architecte de base de données
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : novembre 2004
Messages : 1 299
Points : 2 282
Points : 2 282
Envoyer un message via MSN à iberserk
Citation:
J'ai fait un peu de lecture sur la recherche en texte intégral, et je compris que je ne peux pas utiliser cette fonctionnalité pour accélérer la recherche.

Est-ce que je me trompe ?
Si non, avez-vous des idées ?
A lavue de votre requete vous ne faites votre recherche que pour "ressortir" les mots commencant par votre critère...

FTS sait faire celà... de base
iberserk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/03/2011, 16h23   #4
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 953
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 953
Points : 17 773
Points : 17 773
Tu peut quand même faire un :
Code :
1
2
WHERE CONTAINS ( (mes colonnes),' "toto*" ')
AND  CONTAINS ( (mes autres colonnes),' "toto*" ')
A lire : http://blog.developpez.com/sqlpro/p9...ext-search-no/
Notamment : http://sqlpro.developpez.com/FullTex...Lserver100.gif

A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/03/2011, 04h30   #5
Modérateur

 
Avatar de elsuket
 
Homme Nicolas Souquet
Administrateur de base de données
Inscription : janvier 2005
Messages : 4 667
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Souquet
Âge : 30
Localisation : Thaïlande

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : janvier 2005
Messages : 4 667
Points : 8 715
Points : 8 715
Mon problème est que plus l'utilisateur peut vouloir, pour trouver toto, écrire simplement 'tot' .
Du coup le CONTAINS ne me retourne rien

@++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes.
Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012
elsuket est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/03/2011, 10h19   #6
Membre Expert
 
Avatar de iberserk
 
Homme Bruno IGNACE
Architecte de base de données
Inscription : novembre 2004
Messages : 1 299
Détails du profil
Informations personnelles :
Nom : Homme Bruno IGNACE
Âge : 30
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Architecte de base de données
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : novembre 2004
Messages : 1 299
Points : 2 282
Points : 2 282
Envoyer un message via MSN à iberserk
Celà ne vous renvois rien?:

Code :
1
2
WHERE CONTAINS ( (mes colonnes),' "tot*" ')
AND  CONTAINS ( (mes autres colonnes),' "tot*" ')
iberserk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/03/2011, 13h02   #7
Modérateur

 
Avatar de elsuket
 
Homme Nicolas Souquet
Administrateur de base de données
Inscription : janvier 2005
Messages : 4 667
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Souquet
Âge : 30
Localisation : Thaïlande

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : janvier 2005
Messages : 4 667
Points : 8 715
Points : 8 715
J'avais supprimé la table de test que j'ai utilisé pour ce post, donc je viens de la recréer avec les catalogue FTS, et tout fonctionne proprement ...
Impossible de comprendre où était mon erreur ...

Merci pour votre aide !

@++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes.
Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012
elsuket est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h08.


 
 
 
 
Partenaires

Hébergement Web