A Lucene field name can be anything... so '#' could also be a collision.
If we wish to reserve certain names going forward, I'd vote for reserving ids with an underscore on either side.
But really, the whole collision thing is overblown... this is a single name that people will not have used before. On a practical level, I don't believe it's an issue.
We will need another one too - as a container for document metadata. I've suggested meta for that in
We aren't adding these all the time... there was exactly one before this.. "score". No future document level metadata will collide since they will be contained in whatever meta ends up being.
Further advantages to _id_ (single underscores surrounding the id):
- consistent with magic fieldnames _query_ and _val_ for nested queries in the query parser, and I could see supporting _id_:1 in the future
- people may want to return the actual ids for documents... wherever that info goes (separate return vector like sort_field_values for distributed search or _meta_) it will be nicer for clients if the label for it is actually an identifier and not '#'