2009-03-24 4 views
2

J'ai configuré la recherche FT dans SQL Server 2005 mais je n'arrive pas à trouver un moyen de faire correspondre le mot clé "Lias" à un enregistrement avec "Lia". Ce que je veux essentiellement, c'est permettre aux gens de chercher sans l'apostrophe.Apostrophes et recherche SQL Server FT

J'ai été sur et hors de ce problème depuis un certain temps maintenant toute aide sera vraiment une bénédiction.

Répondre

1

EDIT 2: juste réalisé cela ne résout pas réellement votre problème, veuillez ignorer et voir l'autre réponse! Le code ci-dessous renverra les résultats pour un cas où un utilisateur a inséré une apostrophe qui ne devrait pas être là, comme "abandonné c'est le fret".

Je n'ai pas FT installé localement et n'ai pas testé - vous pouvez utiliser la syntaxe de CONTIENT pour tester aussi bien l'apparition d'origine et une avec l'apostrophe dépouillé, à savoir:

SELECT * 
FROM table 
WHERE CONTAINS ('value' OR Replace('value', '''','')) 

EDIT: Vous pouvez rechercher des phrases en utilisant des guillemets, par exemple

SELECT * 
FROM table 
WHERE CONTAINS ("this phrase" OR Replace("this phrase", '''','')) 

Voir MSDN documentation for CONTAINS. Cela indique en fait que la ponctuation est ignorée de toute façon, mais encore une fois, je n'ai pas testé; il peut être utile d'essayer seul CONTAINS('value').

+1

Hmm .. Cela peut fonctionner mais que diriez-vous pour des recherches de phrase? Ceci est plus approprié pour les recherches à long terme. – vintana

+0

Modifié pour ajouter des informations de phrase et un lien vers la documentation. –

0

Je ne l'ai pas utilisé FT, mais en faisant des requêtes sur des colonnes varchar, et à la recherche des noms tels que O'Reilly, je l'ai utilisé:

surname like Replace(@search, '''', '') + '%' or 
Replace(surname,'''','') like @search + '%' 

Cela permet d'être lapostrophe dans les deux la valeur de la base de données ou le terme recherché. Il va évidemment aussi se comporter comme un chien avec une grande table.

L'alternative (probablement pas une bonne probablement) serait d'enregistrer une deuxième copie des données, dépouillé des caractères non-alpha, et rechercher (également?) Contre cette copie. Donc, l'original contiendrait Lia et la deuxième copie de Lias. Doubler la quantité de stockage, etc.

+0

Copier la colonne de texte à un autre, moins l'apostrophe, est le dernier recours que j'ai en tête. Cela ne semble pas correct cependant. Est-ce que Lucene.NET ou d'autres moyens de recherche peuvent contourner ce problème? – vintana

0

Une autre tentative:

SELECT surname 
FROM table 
WHERE surname LIKE '%value%' 
OR REPLACE(surname,'''','') LIKE '%value%' 

Cela fonctionne pour moi (sans FT activé), à savoir que j'obtenir les mêmes résultats lors de la recherche O'Connor ou OConnor.

Questions connexes