J'écris une application interne qui contient plusieurs informations de texte ainsi qu'un certain nombre de données sur ces pièces de texte. Ces données seront conservées dans une base de données (SQL Server, bien que cela puisse changer) par ordre d'entrée. P>
J'aimerais pouvoir rechercher le plus pertinent de ces informations, le plus pertinent de ceux-ci pour être en haut. Je suis initialement examiné à l'aide de la recherche en texte intégral SQL Server, mais elle n'est pas aussi flexible pour mes autres besoins que j'avais espéré, il semble donc que j'ai besoin de développer ma propre solution à cela. P>
3 Réponses :
Lucene.net pourrait être votre meilleur choix. C'est un moteur de recherche de texte complet mature utilisant Index inversé . P>
http: // codeclimber .NET.NZ / Archive / 2009/09/02 / Lucene.net-votre-First-Application.aspx P>
mise à jour: p>
J'ai écrit une petite bibliothèque pour indexer contre des collections en mémoire à l'aide de Lucene.net - Cela pourrait être utile pour cela. https://github.com/mcintyre321/linqdex P>
J'aurais dû expliquer dans ma question que j'avais déjà examiné à l'aide de Lucene ou en remplaçant des parties de sa fonctionnalité avec ce que j'ai écrit. Malheureusement, Lucene n'est pas suffisamment flexible pour que je modifie ce que j'ai besoin de répondre aux critères des informations que j'ai besoin pour tenir, donc je devrai écrire moi-même l'index inversé.
Voici un aperçu grossier d'une approche que j'ai utilisée avec succès en C # dans le passé: notes: p> getNextword () itère à travers le champ et les retours le mot suivant et la position. Pour la mettre en œuvre, il s'agit d'utiliser String.indexof () et de caractères de caractères de caractère (ISALPHA, etc.). P> getdatabasetextFieldforid () et getdatabaseFields () sont explicatifs, appliquent au besoin. P> p>
Désolé pour le retard énorme pour revenir à cette réponse. Cela a l'air génial! La seule question que j'ai avec cela est la suivante: comment on écrirait alors votre dictionnaire dans une base de données. J'ai édité la question avec ce que je veux dire.
Désolé, je viens de regarder le code et je me suis rendu compte que je pouvais simplement dupliquer les mots qu'ils apparaissent dans plusieurs documents. Il devrait être assez facile d'envoyer ceci à mes cours de manutention de la base de données; Une fois que j'ai mis en œuvre, je vais accepter cette réponse.
@Ender, content que ce soit utile. La sérialisation est une option pour enregistrer / charger des bases de données. Alternativement itération à travers la collection de clés de dictionnaire et que chaque valeur correspondante serait une autre.
J'ai réussi à la mettre en œuvre avec succès en utilisant LINQ pour obtenir chaque valeur, alors j'ai accepté cette réponse. Juste par intérêt, comment auriez-vous implémenté la méthode GetNextWord (), car j'ai divisé le terrain complet en mots distincts et itératés jusqu'à ce qu'ils soient tous partis.
Si vous cherchez à tourner le vôtre, le dictionnaire Une telle implémentation d'un ensemble est dans le Wintellect PowerCollections . Je ne sais pas si cela vous donnerait une prestation de performance ou non sur Linq. P>
En ce qui concerne l'enregistrement d'un jeu de données code>, je ne suis pas sûr de ce que vous envisagez. Je ne suis au courant de rien qui écrit automatiquement à un
ienumerable code>, bien qu'une classe de jeu spécialisée puisse augmenter les performances. P>
Dataset code>. Je soupçonne que vous devrez vous écrire vous-même, surtout que vous avez mentionné plusieurs fois à propos d'autres options tierces, n'étant pas suffisamment flexible. P>
Voici un autre index inversé C # basé sur les génériques: aleandmusic.com/invertedindex.aspx