tagFilters parameter lets you filter records based on values in the _tags attribute.
It uses the same syntax and structure as facetFilters.
Unlike regular facets, _tags is always available for filtering—you don’t need to include it in attributesForFaceting.
To use this parameter, your records must contain a top-level _tags attribute.
This parameter is only for filtering—it doesn’t return facet counts or support faceting behavior.
For advanced use cases or filters on arbitrary attributes,
use the
filters parameter instead.Usage notes
- Tag names are case-sensitive.
- Multiple tags in an array are combined with
AND.
Use nested arrays forORconditions. - Prefix a tag with
-to exclude it.
Example:["tag1", "-tag2"]meanstag1 AND NOT tag2.
facetFilters.
Example
Current API clients
Current API clients
var response = await client.SearchSingleIndexAsync<Hit>(
"INDEX_NAME",
new SearchParams(
new SearchParamsObject
{
Query = "query",
TagFilters = new TagFilters(
new List<TagFilters>
{
new TagFilters("SciFi"),
new TagFilters(
new List<TagFilters> { new TagFilters("Book"), new TagFilters("Movie") }
),
}
),
}
)
);
final response = await client.searchSingleIndex(
indexName: "INDEX_NAME",
searchParams: SearchParamsObject(
query: "query",
tagFilters: [
"SciFi",
[
"Book",
"Movie",
],
],
),
);
response, err := client.SearchSingleIndex(client.NewApiSearchSingleIndexRequest(
"INDEX_NAME").WithSearchParams(search.SearchParamsObjectAsSearchParams(
search.NewEmptySearchParamsObject().SetQuery("query").SetTagFilters(search.ArrayOfTagFiltersAsTagFilters(
[]search.TagFilters{*search.StringAsTagFilters("SciFi"), *search.ArrayOfTagFiltersAsTagFilters(
[]search.TagFilters{*search.StringAsTagFilters("Book"), *search.StringAsTagFilters("Movie")})})))))
if err != nil {
// handle the eventual error
panic(err)
}
SearchResponse response = client.searchSingleIndex(
"INDEX_NAME",
new SearchParamsObject()
.setQuery("query")
.setTagFilters(
TagFilters.of(Arrays.asList(TagFilters.of("SciFi"), TagFilters.of(Arrays.asList(TagFilters.of("Book"), TagFilters.of("Movie")))))
),
Hit.class
);
const response = await client.searchSingleIndex({
indexName: 'indexName',
searchParams: { query: 'query', tagFilters: ['SciFi', ['Book', 'Movie']] },
});
var response =
client.searchSingleIndex(
indexName = "INDEX_NAME",
searchParams =
SearchParamsObject(
query = "query",
tagFilters =
TagFilters.of(
listOf(
TagFilters.of("SciFi"),
TagFilters.of(listOf(TagFilters.of("Book"), TagFilters.of("Movie"))),
)
),
),
)
$response = $client->searchSingleIndex(
'INDEX_NAME',
['query' => 'query',
'tagFilters' => [
'SciFi',
[
'Book',
'Movie',
],
],
],
);
response = client.search_single_index(
index_name="INDEX_NAME",
search_params={
"query": "query",
"tagFilters": [
"SciFi",
[
"Book",
"Movie",
],
],
},
)
response = client.search_single_index(
"INDEX_NAME",
Algolia::Search::SearchParamsObject.new(query: "query", tag_filters: ["SciFi", ["Book", "Movie"]])
)
val response = Await.result(
client.searchSingleIndex(
indexName = "INDEX_NAME",
searchParams = Some(
SearchParamsObject(
query = Some("query"),
tagFilters =
Some(TagFilters(Seq(TagFilters("SciFi"), TagFilters(Seq(TagFilters("Book"), TagFilters("Movie"))))))
)
)
),
Duration(100, "sec")
)
let response: SearchResponse<Hit> = try await client.searchSingleIndex(
indexName: "INDEX_NAME",
searchParams: SearchSearchParams.searchSearchParamsObject(SearchSearchParamsObject(
query: "query",
tagFilters: SearchTagFilters.arrayOfSearchTagFilters([
SearchTagFilters.string("SciFi"),
SearchTagFilters.arrayOfSearchTagFilters([
SearchTagFilters.string("Book"),
SearchTagFilters.string("Movie"),
]),
])
))
)
Legacy API clients
Legacy API clients
index.Search(new Query("query")
{
TagFilters = new List>
{
new List { "Book", "Movie" },
new List { "SciFi" }
}
});
res, err := index.Search(
"query",
opt.TagFilterAnd(
opt.TagFilterOr("Book", "Movie"),
"SciFi",
),
)
index.search(
new Query("query")
.setTagFilters(Arrays.asList(
Arrays.asList(
"Book",
"Movie"
),
"SciFi"
))
);
index
.search("query", {
tagFilters: [["Book", "Movie"], "SciFi"],
})
.then(({ hits }) => {
console.log(hits);
});
val query = query("query") {
tagFilters {
or {
tag("book")
tag("movie")
}
and {
tag("SciFi")
}
}
}
index.search(query)
$results = $index->search('query', [
'tagFilters' => [
[
"Book",
"Movie"
],
"SciFi"
]
]);
results = index.search("query", {"tagFilters": [["Book", "Movie"], "SciFi"]})
results = index.search(
"query",
{
tagFilters: [
[
"Book",
"Movie"
],
"SciFi"
]
}
)
client.execute {
search into "myIndex" query Query(
query = Some("query"),
tagFilters = Some(Seq(
Some(Seq(
"Book",
"Movie"
)),
"SciFi"
))
)
}
let query = Query("query").set(\.tagFilters, to: [
.or("Book", "Movie"),
"SciFi"
])
index.search(query: query) { result in
if case .success(let response) = result {
print("Response: \(response)")
}
}