Hoops, sorry for that html and broken Text-part:
function(doc) {
if (doc.type == "email") {
thread = [];
if (doc.header.references){
thread = doc.header.references.split(" ");
}
thread.push(doc.header['message-id']);
thread_id = thread[0];
emit([thread_id, thread,], doc.header.subject);
}
}
//Thomas
Am 27.11.2008 13:16 Uhr, Thomas Kerpe schrieb:
Jedediah,
This should be really easy. When you have for shure unique Message-IDs
you can let identify your threads and single messages with them. Your
map will emit
function(doc) {
if (doc.header.references){
thread = doc.header.references.split(" ");
thread.push(doc.header['message-id']);
thread_id = thread[0];
} else {
thread = [doc.header['message-id']];
thread_id = doc.header['message-id'];
}
emit([thread_id, thread, ], null);
}
In this way you can build your indexes. Maybe add a date or the sender
adddress to your key. In this way you can get whole threads by knowing
only one message ID.
HTH,
//Thomas
2008/11/24 Jedediah Smith <[EMAIL PROTECTED]
<mailto:[EMAIL PROTECTED]>>
I'm using CouchDB to store and process emails.
Every email has a "message-id" header field containing a globally
unique identifier and zero or more "references" and "in-reply-to"
fields, each of which contains the message-id of a different message.
To construct a threaded view, a tree structure is built using
"references" and "in-reply-to" as parent links. This implies that
a message can have more than one parent, in which case it would
appear multiple times in the view.
I would like to have a CouchDB view that allows me to easily
construct threads in this way. Specifically, given a particular
message, I want to get all of its directly or indirectly connected
messages. Messages don't need to be in any particular order within
a thread. It can be assumed that a thread contains a small number
of messages, say <100
The view might have one or more other key fields (e.g. date) which
will be used to sort the threads or restrict the range. When a
range is given, the view returns all messages from each thread
that contains at least one message in the range.
I want to be able to handle each of these cases with one request,
without storing intermediate data in documents.