SQL Server 2008 recherche en texte intégral (FTS) versus Lucene.NET
Je sais qu'il y a eu des questions dans le passé sur SQL 2005 versus Lucene.NET mais depuis 2008 est sorti et ils ont fait beaucoup de changements et se demandaient si quelqu'un pouvait me donner des avantages/inconvénients (ou un lien vers un article).
5 réponses
J'ai construit une base de connaissances de taille moyenne (peut-être 2 Go de texte indexé) au-dessus du FTS de SQL Server 2005 en 2006, et je l'ai maintenant déplacé vers l'iFTS de 2008. Les deux situations ont bien fonctionné pour moi, mais le passage de 2005 à 2008 a été en fait une amélioration pour moi.
Ma situation n'était pas comme celle de StackOverflow en ce sens que j'indexais des données qui n'étaient actualisées que tous les soirs, mais j'essayais de joindre les résultats de recherche de plusieurs instructions CONTAINSTABLE les unes aux autres et à tables relationnelles.
Dans le FTS de 2005, cela signifiait que chaque CONTAINSTABLE devait exécuter sa recherche sur l'index, renvoyer les résultats complets et ensuite demander au moteur DB de joindre ces résultats aux tables relationnelles (tout cela était transparent pour moi, mais cela se passait et était coûteux pour les requêtes). L'iFTS de 2008 a amélioré cette situation car l'intégration de la base de données permet aux résultats CONTAINSTABLE multiples de faire partie du plan de requête ce qui a fait beaucoup de recherches plus efficace.
Je pense que les moteurs FTS de 2005 et 2008, ainsi que Lucene.NET, avoir des compromis architecturaux qui vont aligner mieux ou pire à beaucoup de circonstances du projet - je viens d'avoir de la chance que la mise à niveau a fonctionné en ma faveur. Je peux complètement voir pourquoi les iFTS de 2008 ne fonctionneraient pas dans la même configuration que ceux de 2005 pour la nature hautement OLTP d'un cas d'utilisation comme StackOverflow.com. cependant, je ne négligerais pas la possibilité que l'iFTS 2008 puisse être isolé du charge de transaction d'insertion lourde... mais il semble aussi que cela pourrait être autant de travail à accomplir que de passer à Lucene.NET ... et le facteur cool de Lucene.NET est difficile à ignorer ;)
Quoi qu'il en soit, pour moi, la facilité et l'efficacité des iFTS de SQL 2008 dans la majorité des situations évitent probablement le facteur "cool" de Lucene (bien qu'il soit facile à utiliser, Je ne l'ai jamais utilisé dans un système de production donc je réserve un commentaire à ce sujet). Je serais intéressant de savoir combien Lucene est plus efficace (s'est avéré être? est-il mis en œuvre maintenant?) dans StackOverflow ou des situations similaires.
SQL Server FTS sera plus facile à gérer pour un petit déploiement. Puisque FTS est intégré à la base de données, le SGBDR gère automatiquement la mise à jour de l'index. L'inconvénient ici est que vous n'avez pas de solution de mise à l'échelle évidente à court de réplication de DB. donc, si vous n'avez pas besoin de mettre à l'échelle, SQL Server FTS est probablement "plus sûr". Politiquement, la plupart des magasins vont être plus à l'aise avec une solution SQL Server pure.
Du côté de Lucene, je préférerais SOLR à Lucene. Avec soit vous devez faire plus de travail vous-même en mettant à jour l'index lorsque les données changent, ainsi que mapper les données vous-même à L'index SOLR/Lucene. Les avantages sont que vous pouvez facilement évoluer en ajoutant des index supplémentaires. Vous pouvez exécuter ces index sur des serveurs linux très maigres, ce qui élimine certains coûts de licence. Si vous prenez la route Lucene/SOLR, Je viserais à mettre toutes les données dont vous avez besoin directement dans l'index, plutôt que de remettre des pointeurs à la base de données dans l'index. Vous pouvez inclure des données dans l'index qui n'est pas consultable, par exemple vous pourriez avoir pré-construit HTML ou XML stocké dans l'index, et le servir en tant que résultat de recherche. Avec cette approche, votre base de données pourrait être en panne, mais vous êtes toujours en mesure de servir les résultats de recherche dans un mode déconnecté.
Je n'ai jamais vu de comparaison de performances en tête-à-tête entre SQL Server 2008 et Lucene, mais j'aimerais en voir un.
Cela pourrait aider: http://blog.stackoverflow.com/2008/11/sql-2008-full-text-search-problems/
N'ont pas utilisé SQL Server 2008 personnellement, bien que basé sur cette entrée de blog, il semble que la fonctionnalité de recherche en texte intégral est plus lente qu'elle ne l'était en 2005.
Nous utilisons les deux possibilités de recherche en texte intégral, mais à mon avis, Cela dépend des données elles-mêmes et de vos besoins.
Nous évoluons avec des serveurs web, et donc j'aime lucene, parce que je n'ai pas beaucoup de charge sur le serveur sql.
Pour commencer à null et vouloir avoir un textsearch complet, je préférerais la solution sql-server, car je pense qu'il est vraiment rapide d'obtenir des résultats, si vous voulez lucene, vous devez en implémenter plus au début (et aussi obtenir du savoir-faire).
Une considération que vous devez garder à l'esprit est le type de contraintes de recherche que vous avez en plus de la contrainte de texte intégral. Si vous faites des contraintes que lucene ne peut pas fournir, alors vous voudrez presque certainement utiliser FTS. L'une des bonnes choses à propos de 2008 est qu'ils ont amélioré l'intégration DE FTS avec des requêtes sql server standard, de sorte que les performances devraient être meilleures avec des contraintes mixtes de base de données et de FT qu'en 2005.