`search.py` ```import typesense client = typesens...
# community-help
a
search.py
Copy code
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.