2009-04-03 6 views
0

In meinem aktuellen Projekt muss ich alle E-Mails und ihre Anhänge von mehreren Postfächern indizieren.DynamicFields in Solr

Ich werde Solr verwenden, aber ich weiß nicht, was der beste Ansatz zum Aufbau meiner Indexstruktur ist. Mein erster Ansatz war:

<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> 

Aber jetzt bin ich nicht wirklich sicher, ob es die beste Struktur ist. Ich glaube nicht, dass ich für einen Begriff suchen kann (z Stackoverflow) und weiß, wo der Begriff war (z attachmentBody_1 oder _2 oder _3 usw.) mit einer einzigen Abfrage.

Hat jemand einen besseren Vorschlag für die Struktur meines Index?

Antwort

0

Ich fand eine mögliche Lösung. Alles, was ich tun muss, ist attachmentBody als gespeichert zu setzen.

Diese Lösung ist nicht gut genug, weil der Raum-Index wird dramatisch zunehmen, aber in meinem Fall ist es kein Problem, weil ich zu Highlight-Funktion implementieren, und diese Felder müssen gespeichert werden.

4

Sie können multiValued Felder für attachmentName und attachmentBody verwenden. Sie hätten also zwei reguläre Felder anstelle von dynamischen Feldern. Sie können dann die Hervorhebung verwenden, um die spezifischen Werte zurückzubringen, die mit dem umgebenden Kontext übereinstimmen.

Eine andere Möglichkeit wäre, jede Befestigungs zu machen ein separates Dokument, und speichern Sie etwas zu erkennen, welche E-Mail zu der es gehört. Der Nachteil dieses Ansatzes besteht darin, dass Sie eventuell Daten aus der E-Mail mehrmals indizieren müssen. Aber das ist wirklich nur ein Problem, wenn die meisten E-Mail-Nachrichten mehr als einen Anhang haben.

+0

Auf diese Weise würde ich in welcher Datei das Spiel war nie in der Lage sein zu wissen. Wie auch immer ... zum Hervorheben brauche ich Felder mit store = "true" also sind wir immer noch mit Platzproblemen. –

+0

Die zweite Möglichkeit ist gut und ich thinked bereits auf das =) –