The operators associated with an operator class are identified by
"strategy numbers", which serve to identify the semantics of
each operator within the context of its operator class.
For example, B-trees impose a strict ordering on keys, lesser to greater,
and so operators like "less than" and "greater than or equal
to" are interesting with respect to a B-tree.
Because
PostgreSQL allows the user to define operators,
PostgreSQL cannot look at the name of an operator
(e.g., `<` or `>=`) and tell what kind of
comparison it is. Instead, the index access method defines a set of
"strategies", which can be thought of as generalized operators.
Each operator class shows which actual operator corresponds to each
strategy for a particular data type and interpretation of the index
semantics.

B-tree indexes define 5 strategies, as shown in Table 14-1.

**Table 14-1. B-tree Strategies**

Operation | Strategy Number |
---|

less than | 1 |

less than or equal | 2 |

equal | 3 |

greater than or equal | 4 |

greater than | 5 |

Hash indexes express only bitwise similarity, and so they define only 1
strategy, as shown in Table 14-2.

**Table 14-2. Hash Strategies**

Operation | Strategy Number |
---|

equal | 1 |

R-tree indexes express rectangle-containment relationships.
They define 8 strategies, as shown in Table 14-3.

**Table 14-3. R-tree Strategies**

Operation | Strategy Number |
---|

left of | 1 |

left of or overlapping | 2 |

overlapping | 3 |

right of or overlapping | 4 |

right of | 5 |

same | 6 |

contains | 7 |

contained by | 8 |

GiST indexes are even more flexible: they do not have a fixed set of
strategies at all. Instead, the "consistency" support routine
of a particular GiST operator class interprets the strategy numbers
however it likes.

By the way, the `amorderstrategy` column
in `pg_am` tells whether
the access method supports ordered scan. Zero means it doesn't; if it
does, `amorderstrategy` is the strategy
number that corresponds to the ordering operator. For example, B-tree
has `amorderstrategy` = 1, which is its
"less than" strategy number.

In short, an operator class must specify a set of operators that express
each of these semantic ideas for the operator class's data type.