2009-10-29 4 views
3

Je construis un formulaire de recherche simple pour notre base de données de tickets de support en utilisant Lucene.Net, et je veux ajouter la possibilité de filtrer, par exemple pour filtrer les résultats par statut du ticket. Quel est le meilleur moyen de le faire? Pour autant que je peux voir les options que j'ai sont:Comment combiner la recherche en texte intégral et le filtrage avec lucene.Net

  1. Inclure tous les termes que je veux filtrer dans mon index, et filtrer à l'aide Lucene.Net
  2. Appliquer le filtre après avoir obtenu les résultats de recherche de Lucene en allant dans la base de données pour filtrer les résultats renvoyés par Lucene qui ne sont pas valides pour le filtre.

L'option 1 va gonfler la taille de mon index de plus en plus pour chaque champ supplémentaire que je veux filtrer. D'autre part, l'option 2 va gonfler la taille de mon index, provoquer des problèmes lors de l'ajout de nouveaux champs à filtrer et rend également la pagination plus délicate.

Y a-t-il un choix évident ici, ou des combinaisons des deux sont-elles acceptables? (Et est-il une 3ème option que je ne peux pas voir?)

Répondre

2

je ne voudrais pas vous soucier de la taille de l'index :-)

Nous optons pour l'option 1 tout le temps et ne jamais filtrer les données en dehors de Lucene .net. Vous pourriez vous retrouver dans une situation où vous devez récupérer BEAUCOUP de hits sur lucene.net avant d'obtenir le nombre de "vrais" hits après le filtrage dans la base de données - cela pourrait aussi nécessiter plusieurs allers-retours à la base de données.

Nous avons actuellement environ 100 champs en moyenne sur nos documents de 150K et cela fonctionne très bien.