<row><entry><literal>&& (polygon,polygon)</literal></entry></row>
<row><entry><literal><<| (polygon,polygon)</literal></entry></row>
<row><entry><literal>&<| (polygon,polygon)</literal></entry></row>
<row><entry><literal>|>> (polygon,polygon)</literal></entry></row>
<row><entry><literal>|&> (polygon,polygon)</literal></entry></row>
<row>
<entry valign="middle" morerows="5"><literal>quad_point_ops</literal></entry>
<entry><literal>|>> (point,point)</literal></entry>
<entry valign="middle" morerows="5"><literal><-> (point,point)</literal></entry>
</row>
<row><entry><literal><< (point,point)</literal></entry></row>
<row><entry><literal>>> (point,point)</literal></entry></row>
<row><entry><literal><<| (point,point)</literal></entry></row>
<row><entry><literal>~= (point,point)</literal></entry></row>
<row><entry><literal><@ (point,box)</literal></entry></row>
<row>
<entry valign="middle" morerows="9"><literal>range_ops</literal></entry>
<entry><literal>= (anyrange,anyrange)</literal></entry>
<entry valign="middle" morerows="9"></entry>
</row>
<row><entry><literal>&& (anyrange,anyrange)</literal></entry></row>
<row><entry><literal>@> (anyrange,anyelement)</literal></entry></row>
<row><entry><literal>@> (anyrange,anyrange)</literal></entry></row>
<row><entry><literal><@ (anyrange,anyrange)</literal></entry></row>
<row><entry><literal><< (anyrange,anyrange)</literal></entry></row>
<row><entry><literal>>> (anyrange,anyrange)</literal></entry></row>
<row><entry><literal>&< (anyrange,anyrange)</literal></entry></row>
<row><entry><literal>&> (anyrange,anyrange)</literal></entry></row>
<row><entry><literal>-|- (anyrange,anyrange)</literal></entry></row>
<row>
<entry valign="middle" morerows="9"><literal>text_ops</literal></entry>
<entry><literal>= (text,text)</literal></entry>
<entry valign="middle" morerows="9"></entry>
</row>
<row><entry><literal>< (text,text)</literal></entry></row>
<row><entry><literal><= (text,text)</literal></entry></row>
<row><entry><literal>> (text,text)</literal></entry></row>
<row><entry><literal>>= (text,text)</literal></entry></row>
<row><entry><literal>~<~ (text,text)</literal></entry></row>
<row><entry><literal>~<=~ (text,text)</literal></entry></row>
<row><entry><literal>~>=~ (text,text)</literal></entry></row>
<row><entry><literal>~>~ (text,text)</literal></entry></row>
<row><entry><literal>^@ (text,text)</literal></entry></row>
</tbody>
</tgroup>
</table>
<para>
Of the two operator classes for type <type>point</type>,
<literal>quad_point_ops</literal> is the default. <literal>kd_point_ops</literal>
supports the same operators but uses a different index data structure that
may offer better performance in some applications.
</para>
<para>
The <literal>quad_point_ops</literal>, <literal>kd_point_ops</literal> and
<literal>poly_ops</literal> operator classes support the <literal><-></literal>
ordering operator, which enables the k-nearest neighbor (<literal>k-NN</literal>)
search over indexed point or polygon data sets.
</para>
</sect2>
<sect2 id="spgist-extensibility">
<title>Extensibility</title>
<para>
<acronym>SP-GiST</acronym> offers an interface with a high level of
abstraction, requiring the access method developer to implement only
methods specific to a given data type. The <acronym>SP-GiST</acronym> core
is responsible for efficient disk mapping and searching the tree structure.
It also takes care of concurrency and logging considerations.
</para>
<para>
Leaf tuples of an <acronym>SP-GiST</acronym> tree usually contain values
of the same data type as the indexed column, although it is also possible