PayloadIndexParams
The parameters Qdrant accepts beside the index type, one shape per type.
PayloadSchemaType names the kind of index; this names how it is built. Two of the choices decide whether a query works at all rather than how fast it is: a matchPhrase filter matches nothing unless the text index was created with Text.phraseMatching, and an index built without Keyword.isTenant leaves a multi-tenant collection's points scattered across the disk rather than grouped per tenant. The rest are cost: onDisk is the difference between an index that has to fit in RAM and one that does not.
Build one with the DSL rather than by hand:
qdrant.createPayloadIndex("docs", "body") {
text { tokenizer = Tokenizer.WORD; phraseMatching = true }
}Qdrant takes two further text options this does not model, stopword sets and stemming, because both are sub-objects with their own vocabulary rather than a flag. They are the reason this type is a sealed hierarchy that can grow a field without breaking a caller.
Inheritors
Types
A datetime index, for datetimeRange filters. See Integer.isPrincipal.
A float index. See Integer.isPrincipal for what isPrincipal decides.
A full-text index, for matchText, matchTextAny and matchPhrase.
A UUID index. See Keyword.isTenant for what isTenant decides.
Properties
Whether Qdrant builds the extra HNSW links for this field, which is what makes a filtered search over it read one tenant's or one category's points instead of walking the collection and discarding. It needs payloadM above zero on the HNSW config to do anything, so a caller who sets one without the other has asked for half of a multi-tenant layout.