2010-10-18 7 views
3

J'ai une colonne nvarchar qui contient du texte anglais et japonais. Je veux faire une recherche plein texte dans cette colonne. Lors de la configuration de la recherche en texte intégral, nous devons spécifier l'option de langue pour le séparateur de mots (par exemple en utilisant un séparateur de travail en anglais ou en utilisant un séparateur de mots japonais). Je me demande dans ce cas, quelle langue devrais-je attribuer? Je ne suis pas sûr si le briseur de travail de langue japonaise travaille aussi pour l'anglais. J'utilise SQL Server 2008 Enterprise.à propos de la requête de texte intégral dans SQL

merci à l'avance, George

+3

Ne serait-il pas préférable (si possible) de séparer le texte anglais et japonais en colonnes séparées? Ensuite, vous pouvez appliquer une recherche de texte à chacun. – Tony

+0

Cela signifie-t-il que pour chaque ligne, la colonne Anglaise ou Japonaise est vide? Dans mon application, la colonne à rechercher est soit en japonais ou en anglais. Donc, pour chaque colonne, j'ai besoin de créer deux colonnes supplémentaires, colonne en anglais et colonne en japonais. :-) – George2

+1

Mais vous pouvez également supprimer la colonne d'origine, donc seulement une colonne supplémentaire. On dirait une bonne solution? – thomaspaulb

Répondre

1

Vous devez choisir le séparateur de mots neutre si vous avez une colonne qui a différentes langues (langues en particulier occidentales et non occidentales ensemble) en elle.

Il y a quelques autres options telles que

  • seperating les colonnes de chaque langue (comme @Tony a déclaré)
  • si vos données est un texte brut; le convertir en type de données xml et ajouter des balises de langue qui indiquent la langue utilisée par le moteur de texte intégral.
  • le développement d'un briseur de mot personnalisé (Bien qu'il ne soit pas une solution optimale)

Voici un article sur les meilleures pratiques pour le choix d'une langue lors de la création d'un index en texte intégral.

Ajouté Après Commentaires

Il peut être interrogé plusieurs colonnes de plusieurs façons en fonction de votre cas d'utilisation. Le moyen le plus simple consiste à utiliser le prédicat CONTAINS pour interroger plusieurs colonnes en spécifiant une liste de colonnes à rechercher comme indiqué ci-dessous;

SELECT Name, Color FROM Production.Product 
WHERE CONTAINS((Name, Color), 'Red'); 

Une autre solution peut être en utilisant une colonne d'indicateur de langue qui peut être utilisé dans le cas/instructions IF qui vous aide à diviser conditionnellement la requête en langue. Vous pouvez également utiliser la fonction TSQL DATALENGTH() pour vérifier si elle est vide et décider quelle colonne choisir.

+0

Merci orka! Comment obtenir un meilleur travail et des performances de recherche en texte intégral plus précises? Utilisant le briseur de travail neutre ou utilisant la colonne séparée pour différentes langues? – George2

+1

Je pense qu'il serait préférable que vous sépariez les colonnes par langues pour des résultats et des performances précis. – orka

+0

Merci orka, si je sépare les colonnes par langue, par exemple, une colonne en anglais et une colonne en japonais. Et je vais utiliser le mot anglais breaker sur la colonne anglaise et en utilisant le mot japonais breaker sur la colonne japonaise. Ainsi, une colonne en anglais ou en japonais est vide car une ligne est dans une langue spécifique, ne peut pas être en deux langues (par exemple, la ligne japonaise a une colonne en anglais vide).Mais la condition de ma requête est de renvoyer toutes les lignes correspondantes soit en anglais, soit en japonais. Je ne sais pas comment écrire ce genre de requête en texte intégral, des idées? – George2

Questions connexes