docs-site/content/0.12.0/api/curation.md
While Typesense makes it really easy and intuitive to deliver great search results, sometimes you might want to promote certain documents over others. Or, you might want to exclude certain documents from a query's result set.
Using overrides, you can include or exclude specific documents for a given query.
In the following example, we are overriding the search results by placing the documents with ids 422 and 54 in the first and second positions respectively via the includes condition. Additionally, we're ensuring that the document with id 287 is not returned at all via the excludes condition. You need to specify only one of exclude or include.
Note how we are applying these overrides to an exact match of the query apple. Instead, if we want to match all queries that contained the word apple, we will use the contains match instead.
override = {
"rule": {
"query": "apple",
"match": "exact"
},
"includes": [
{"id": "422", "position": 1},
{"id": "54", "position": 2}
],
"excludes": [
{"id": "287"}
]
}
// Creates/updates an override called `customize-apple` in the `companies` collection
client.collections('companies').overrides().upsert('customize-apple', override)
override = {
"rule": {
"query": "apple",
"match": "exact"
},
"includes": [
{"id": "422", "position": 1},
{"id": "54", "position": 2}
],
"excludes": [
{"id": "287"}
]
}
# Creates/updates an override called `customize-apple` in the `companies` collection
client.collections['companies'].overrides.upsert('customize-apple', override)
override = {
"rule" => {
"query" => "apple",
"match" => "exact"
},
"includes" => [
{"id" => "422", "position" => 1},
{"id" => "54", "position" => 2}
],
"excludes" => [
{"id" => "287"}
]
}
# Creates/updates an override called `customize-apple` in the `companies` collection
client.collections['companies'].overrides.upsert('customize-apple', override)
curl "http://localhost:8108/collections/companies/overrides/customize-apple" -X PUT \
-H "Content-Type: application/json" \
-H "X-TYPESENSE-API-KEY: ${TYPESENSE_API_KEY}" -d '{
"rule": {
"query": "apple",
"match": "exact"
},
"includes": [
{"id": "422", "position": 1},
{"id": "54", "position": 2}
],
"excludes": [
{"id": "287"}
]
}'
{
"id": "customize-apple",
"excludes": [
{
"id": "287"
}
],
"includes": [
{
"id": "422",
"position": 1
},
{
"id": "54",
"position": 2
}
],
"rule": {
"match": "exact",
"query": "apple"
}
}
PUT ${TYPESENSE_HOST}/collections/:collection/overrides/:id
| Parameter | Required | Description |
|---|---|---|
| excludes | no | List of document ids that should be excluded from the search results. |
| includes | no | List of document ids that should be included in the search results with their corresponding positions. |
| rule.query | yes | Indicates what search queries should be overridden. |
| rule.match | yes | Indicates whether the match on the query term should be exact or contains. |
Listing all overrides associated with a given collection.
<Tabs :tabs="['JavaScript','Python','Ruby','Shell']"> <template v-slot:JavaScript>client.collections('companies').overrides().retrieve()
client.collections['companies'].overrides.retrieve()
client.collections['companies'].overrides.retrieve
curl -H "X-TYPESENSE-API-KEY: ${TYPESENSE_API_KEY}" \
"http://localhost:8108/collections/companies/overrides"
{
"overrides":[
{
"id":"customize-apple",
"excludes":[
{
"id":"287"
}
],
"includes":[
{
"id":"422",
"position":1
},
{
"id":"54",
"position":2
}
],
"rule":{
"match":"exact",
"query":"apple"
}
}
]
}
GET ${TYPESENSE_HOST}/collections/:collection/overrides
Fetch an individual override associated with a collection.
<Tabs :tabs="['JavaScript','PHP','Python','Ruby','Shell']"> <template v-slot:JavaScript>client.collections('companies').overrides('customize-apple').retrieve()
$client->collections['companies']->overrides['customize-apple']->retrieve();
client.collections['companies'].overrides['customize-apple'].retrieve()
client.collections['companies'].overrides['customize-apple'].retrieve
curl "http://localhost:8108/collections/companies/overrides/customize-apple" -X GET \
-H "X-TYPESENSE-API-KEY: ${TYPESENSE_API_KEY}"
{
"id":"customize-apple",
"excludes":[
{
"id":"287"
}
],
"includes":[
{
"id":"422",
"position":1
},
{
"id":"54",
"position":2
}
],
"rule":{
"match":"exact",
"query":"apple"
}
}
GET ${TYPESENSE_HOST}/collections/:collection/overrides/:id
Deleting an override associated with a collection.
<Tabs :tabs="['JavaScript','Python','Ruby','Shell']"> <template v-slot:JavaScript>client.collections('companies').overrides('customize-apple').delete()
client.collections['companies'].overrides['customize-apple'].delete()
client.collections['companies'].overrides['customize-apple'].delete
curl "http://localhost:8108/collections/companies/overrides/customize-apple" -X DELETE \
-H "X-TYPESENSE-API-KEY: ${TYPESENSE_API_KEY}"
{
"id": "customize-apple"
}
DELETE ${TYPESENSE_HOST}/collections/:collection/overrides/:id