I'm looking at implementing a custom indexing scheme, and I've been
having trouble understanding the proper approach.
Basically, I need a BK tree, which is a tree-structure useful for
indexing arbitrary discrete metric-spaces (in my case, I'm interested in
indexing across the hamming edit-distance of perceptual hashes, for
fuzzy image searching). I'm /pretty/ sure a SP-GiST index is the correct
index type, as my tree is intrinsically unbalanced.
I have a functional stand-alone implementation of a BK-Tree, and it
works very well, but the complexity of managing what is basically a
external index for my database has reached the point where it's
significantly problematic, and it seems to be it should be moved into
Anyways, looking at the contents of postgres/src/backend/access/spgist,
it looks pretty straightforward in terms of the actual C implementation,
but I'm stuck understanding how to "install" a custom SP-GiST
implementation. There are several GiST indexing implementations in the
contrib directory, but no examples for how I'd go about implementing a
loadable SP-GiST index.
Basically, my questions are:
* Is it possible to implement a SP-GiST indexing scheme as a loadable
o If so, how?
o And is there an example I can base my implementation off of?
I'm relatively comfortable with C (much moreso with C++), but I haven't
spent a lot of time looking at the postgresql codebase. I don't think I
could start from a empty folder and make a properly-implemented module
in any reasonable period of time, so if I have a working example for
some sort of index that uses the same interfaces that would really help