Aadarsh
10/09/2023, 10:08 AMsearch.py
import typesense
client = typesense.Client(
{
"nodes": [
{
"host": host, # For Typesense Cloud use xxx.a1.typesense.net
"port": port, # For Typesense Cloud use 443
"protocol": protocol, # For Typesense Cloud use https
}
],
"api_key": api_key,
"connection_timeout_seconds": connection_timeout_seconds,
}
)
collection1 = {
"name": "collection1",
"fields": [
{
"name": "name",
"type": "string",
"facet": True,
},
{
"name": "priority",
"type": "int32",
"facet": True,
},
{
"name": "code",
"type": "string",
"facet": True,
},
],
}
document1 = [
{"name": "Pizza", "priority": 53, "code": "0"},
{"name": "Burger", "priority": 20, "code": "1"},
{"name": "Cake", "priority": 23, "code": "2"},
{"name": "Kiosk", "priority": 72, "code": "3"},
{"name": "Icecream", "priority": 49, "code": "4"},
]
client.collections.create(collection1)
client.collections["collection1"].documents.import_(document1)
collection2 = {
"name": "collection2",
"fields": [
{
"name": "name",
"type": "string",
"facet": True,
},
{
"name": "priority",
"type": "int32",
"facet": True,
},
{
"name": "code",
"type": "string",
"facet": True,
"reference": "collection1.code",
},
{
"name": "name_tag",
"type": "string[]",
"facet": True,
},
],
}
document2 = [
{"name": "Pizza", "priority": 53, "code": "0", "name_tag": ["0"]},
{"name": "Burger", "priority": 20, "code": "1", "name_tag": ["1"]},
{"name": "Cake", "priority": 23, "code": "2", "name_tag": ["2"]},
{"name": "Kiosk", "priority": 72, "code": "3", "name_tag": ["3"]},
{"name": "Icecream", "priority": 49, "code": "4", "name_tag": ["4"]},
]
client.collections.create(collection2)
client.collections["collection2"].documents.import_(document2)
def retreive_collection(collection_name, verbose=False):
client.collections[collection_name].retrieve()
if verbose:
print(f'"{collection_name}" retreived successfully')
return
collection_names = ["collection1", "collection2"]
filtered_search_requests = list()
for collection in collection_names:
search_request = dict()
search_request["collection"] = collection
search_request["q"] = "pizza"
search_request["sort_by"] = "priority:desc,_text_match:desc"
search_request["prioritize_token_position"] = "true"
if collection=="collection2":
search_request["filter_by"] = "$collection1(code:=name_tag)"
filtered_search_requests.append(search_request)
search_requests = {"searches": filtered_search_requests}
common_search_params = {
"query_by": "name,code",
}
for collection in collection_names:
retreive_collection(collection_name=collection)
response = client.multi_search.perform(search_requests, common_search_params)
print(response)
Docker run command: docker run -p 8108:8108 -v/tmp/data:/data typesense/typesense:0.26.0.rc22 --data-dir /data --api-key=$api_key
Python run command: python search.py
Error: typesense.exceptions.RequestMalformed: [Errno 400] One or more search parameters are malformed.