Skip to main content
Often, you will want to attach metadata information to each document. Then, when sending queries, you may want to filter documents based on that metadata information. ZeroEntropy supports query-time metadata filtering via a comprehensive metadata query language.

Metadata Specification

Document metadata must be of the type dict[str, str | list[str]]. For example, you could attach the following JSON object as document metadata,
Note that attribute names must be alphanumeric (hyphens and underscores are also allowed). And, when an attribute is a list of strings, it must be prefixed with list:.

Metadata Filtering

Basic Usage

In order to filter, you can use the operators $eq, $ne, $gt, $gte, $lt, $lte. These operators represent โ€œequalsโ€, โ€œnot equalsโ€, โ€œgreater thanโ€, โ€œgreater than or equal toโ€, โ€œless thanโ€, and โ€œless than or equal toโ€, respectively. Here is an example of a few filters,
You can check whether or not a string attribute matches a list using $in and $nin for โ€œinโ€ and โ€œnot inโ€ operations.
If you provide a filter query and a document does not contain that attribute, then that attribute will be considered null for that document. In other words, $eq, $gt, $gte, $lt, $lte will all always evaluate to false. But, $neq will always evaluate to true, because null is not equal to any string. Be careful to not have any typos in your query attribute name, or you may not match any documents!

Lists of Strings

When using a โ€œlist of stringsโ€ metadata attribute, the attribute name must start with list:. For example, you can set list:tags to be a list of tags for a blog article document. List of strings can only be used with the operators $in, $nin. These operators will execute โ€œset intersectionโ€. Meaning, a in b is true if and only if a and b have at least one element in common. Here are a few examples,
When sending query filters, do not forget that โ€œlist of stringโ€ attributes must start with list:! If you accidentally query for tags, then you will not find any results. You must query for list:tags.

Boolean Operators

If you want to combine filters, you can use $and, $or as boolean operators. These boolean operators will take in an array of filters. They can also be used recursively to create a tree of boolean logic.