Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Configurer Lucene.Net avec SQL Server

Oui, je l'ai utilisé exactement pour ce que vous décrivez. Nous avions deux services - un pour la lecture et un pour l'écriture, mais uniquement parce que nous avions plusieurs lecteurs. Je suis sûr que nous aurions pu le faire avec un seul service (le rédacteur) et intégrer le lecteur dans l'application Web et les services.

J'ai utilisé lucene.net comme indexeur de base de données général, donc ce que j'ai récupéré était essentiellement des identifiants de base de données (pour les messages électroniques indexés), et je l'ai également utilisé pour récupérer suffisamment d'informations pour remplir les résultats de recherche ou autres sans toucher le base de données. Cela a très bien fonctionné dans les deux cas, même si le SQL peut devenir un peu lent, car vous devez à peu près obtenir un ID, sélectionner un ID, etc. Nous avons contourné cela en créant une table temporaire (avec juste la ligne d'ID) et insertion en masse à partir d'un fichier (qui était la sortie de lucene) puis adhésion à la table des messages. Était beaucoup plus rapide.

Lucene n'est pas parfait, et vous devez penser un peu en dehors de la base de données relationnelle, car ce n'en est TOTALEMENT pas un, mais c'est très très bon dans ce qu'il fait. Ça vaut le coup d'œil, et, me dit-on, n'a pas les problèmes "oups, désolé, vous devez reconstruire votre index" comme le fait le FTI de MS SQL.

BTW, nous traitions entre 20 et 50 millions d'e-mails (et environ 1 million de pièces jointes uniques), totalisant environ 20 Go d'index Lucene, je pense, et plus de 250 Go de base de données SQL + pièces jointes.

Les performances ont été fantastiques, c'est le moins qu'on puisse dire - assurez-vous simplement de penser et d'ajuster vos facteurs de fusion (lorsqu'il fusionne des segments d'index). Il n'y a aucun problème à avoir plus d'un segment, mais il peut y avoir un GROS problème si vous essayez de fusionner deux segments qui ont des éléments de 1 million chacun, et vous avez un fil d'observation qui tue le processus si cela prend trop de temps... .. (oui, ça nous a botté le cul pendant un moment). Donc, gardez le nombre maximum de documents par chose FAIBLE (c'est-à-dire, ne le réglez pas sur maxint comme nous l'avons fait !)

EDIT Corey Trager a documenté comment utiliser Lucene.NET dans BugTracker.NET ici.