2010-02-23 9 views
4

Par exemple, dire que j'ai la facette suivante:Solr/Lucene: valeurs facette d'indexation

Couleurs

  • Rouge (7825)
  • Orange (2343)
  • vert (843)
  • Bleu (5412)

Dans ma base de données, les couleurs seraient une table et chaque couleur aurait une clé primaire et un nom/valeur. Lors de l'indexation avec Solr/Lucene, dans tous les exemples que j'ai vus, la valeur est indexée et non la clé primaire. Donc, si je filtre par la couleur rouge, je voudrais obtenir quelque chose comme ce qui suit:

http://www.example.com/search?color=Red

Je me demande, est-il sage de la place indexer la clé primaire et récupérer les valeurs de la base de données lors de l'affichage valeurs facettes? Alors je place quelque chose comme ceci:

http://www.example.com/search?color=1

« 1 » représentant la clé primaire de la couleur rouge. Je me demande si je devrais adopter cette approche, car les valeurs de plusieurs de mes facettes changent fréquemment, mais les clés primaires restent les mêmes. En outre, l'index doit être synchronisé avec la base de données.

Est-ce que vous avez déjà fait l'expérience? Comment pensez-vous que cela affectera les performances?

Merci d'avance!

+0

Réponse courte: oui, c'est bon. longue réponse: quand je rentre à la maison :-) –

Répondre

1

Si vous prévoyez que vos entités changent fréquemment, il est plus facile d'indexer les ID. Lorsque vous obtenez les résultats de vos facettes, effectuez une recherche dans la base de données pour obtenir les noms des couleurs. De cette façon, les modifications apportées aux couleurs ne nécessiteraient pas la mise à jour des documents affectés dans l'index.

Dans notre système, nous indexons l'identifiant Lucene au lieu du nom des entités, exactement pour les raisons que vous avez indiquées. De plus, nos entités ont un tas de propriétés qui ne sont pas indexées, donc nous devrons frapper la base de données pour les obtenir quand même.

En ce qui concerne les performances, le facettage des ID ne sera pas plus lent ni plus rapide. En ce qui concerne les recherches dans la base de données, cela ne devrait pas être un gros problème, surtout si vous ne faites que réduire les dizaines de facettes à la fois. Vous pouvez toujours utiliser la mise en cache pour accélérer cela si cela devient un problème.

Questions connexes