This extends PR #1065 to include filtering of key-value pairs, a request on Discord from @oppi.li.
In short, if you use include a tag:value in your search query:
- It tries to match it to a "system" tag like "label" or "author"
- If it's not, "tag" is taken to be a custom label with an associated value (in the code, a "dynamic tag")
- If it's a label that has a DID value, then the query will resolve the value as a handle before querying the index
To make them indexable all labels are serialised into the format "mycustomlabel:somevalue", the same way they would be typed in a search, and stored as distinct keywords in bleve. That is, for the purposes of queries they are all rendered into flat strings.
This was threatening to make the duplication worse between the issues and pulls search handlers so I've made an effort to factor out some common logic. I have a feeling this needs a much broader refactor reflecting how similar those two handlers are, but in the meantime this should limit the complexity somewhat.

works like a charm, had a read through the code itself, no notes! thanks so much for this contribution!