6

J'ai créé un catalogue de texte intégral qui stocke les données de certaines des colonnes d'une table, mais le contenu semble avoir été séparé par des caractères que je ne veux pas vraiment considérer comme des délimiteurs de mots. ("/", "-", "_" etc ..)Puis-je définir les séparateurs de mots à utiliser lors de la création d'un index fulltext mssql?

Je sais que je peux définir la langue pour le disjoncteur de mots, et http://msdn.microsoft.com/en-us/library/ms345188.aspx donne une idée de la façon d'installer de nouvelles langues - mais j'ai besoin de plus de contrôle direct que cela, parce que toutes ces langues cassent encore sur les caractères que je veux ne pas casser.

Existe-t-il un moyen de définir ma propre langue à utiliser pour trouver des séparateurs de mots?

+0

Y a-t-il eu des progrès dans cette situation? J'essaie de faire exactement la même chose: la recherche d'index de fulltext using contient pour des noms d'utilisateur de style de Twitter (c.-à-d., @username) mais le symbole de @ est coupé. Une solution infaillible? –

Répondre

3

La possibilité de configurer l'indexation FTS est assez limitée. Je ne pense pas que vous pouvez utiliser des langues pour le faire.

Si vous êtes prêt à relever un défi et avez accès à certaines connaissances C++, vous pouvez toujours écrire une implémentation IFilter personnalisée. Ce n'est pas trivial, mais pas trop difficile. See here for IFilter resources.

4

Les index de texte intégral ne prennent en compte que les caractères _ et ` pendant l'indexation. Tous les autres caractères sont ignorés et les mots se divisent où ces caractères se produisent. Ceci est principalement dû au fait que les index de texte intégral sont conçus pour indexer des documents volumineux et que seuls les mots appropriés sont considérés pour en faire une recherche plus précise.

Nous avons rencontré un problème similaire. Pour résoudre ce fait, nous avions une table de traduction, où des personnages comme @, -,/ ont été remplacés par des séquences spéciales comme '`at`', '` dash`', '`slash`' etc Tout en cherchant dans le texte intégral, vous devez à nouveau remplacer vos caractères dans la chaîne de recherche par ces séquences spéciales et rechercher. Cela devrait prendre soin des caractères spéciaux.