2009-04-03 12 views
0

Dans mon projet actuel, j'ai besoin d'indexer tous les e-mails et leurs pièces jointes de plusieurs boîtes aux lettres.DynamicFields dans Solr

Je vais utiliser Solr, mais je ne sais pas quelle est la meilleure approche pour construire la structure de mon index. Ma première approche était:

<fields> 
<field name="id" require="true"/> 
<field name="uid" require="true"/> 
//A lot of other fields 
<dynamicField name="attachmentName_*" require="false"> 
<dynamicField name="attachmentBody_*" require="false"> 
</fields> 

Mais maintenant je ne suis pas vraiment sûr que ce soit la meilleure structure. Je ne pense pas que je peux rechercher un terme (par exemple stackoverflow) et savoir où le terme était (par exemple attachmentBody_1 ou _2 ou _3 etc) avec une seule requête.

Quelqu'un at-il une meilleure suggestion à la structure de mon index?

Répondre

0

J'ai trouvé une solution possible. Tout ce que j'ai besoin de faire est de mettre en pièce jointe Body comme stocké.

Cette solution n'est pas assez bonne parce que l'espace de l'index augmentera considérablement mais dans mon cas, il n'y a pas de problème parce que j'implémenterai aussi la fonctionnalité de surbrillance et ces champs doivent être stockés.

4

Vous pouvez utiliser des champs multiValued pour attachmentName et attachmentBody. Donc, vous auriez 2 champs réguliers au lieu de champs dynamiques. Vous pouvez ensuite utiliser la surbrillance pour ramener les valeurs spécifiques correspondant au contexte environnant.

Une autre option serait de faire de chaque pièce jointe un document distinct, et de stocker quelque chose pour identifier à quel email il appartient. L'inconvénient de cette approche est que vous devrez peut-être indexer toutes les données de l'email lui-même à plusieurs reprises. Mais ce n'est vraiment un problème que si la plupart des messages électroniques ont plus d'une pièce jointe.

+0

De cette façon, je ne serais jamais capable de savoir dans quel fichier correspondait le résultat. Quoi qu'il en soit ... pour mettre en évidence j'ai besoin de champs avec store = "true" donc nous sommes toujours avec un problème d'espace. –

+0

Votre deuxième option est bonne et j'ai déjà réfléchi dessus =) –