--- layout: page title: Schema permalink: /python-api --- # Aiosumma Aiosumma consists of two parts: Python client for GRPC API and query library. While Python client for GRPC API is pretty plain, query library provides tools for extending queries and deriving intents through various tools ## Query Library ```python import asyncio from aiosumma import QueryProcessor, SummaClient from aiosumma.transformers import MorphyTransformer from izihawa_nlptools.language_detect import detect_language async def main(): # Create client and connect to the endpoint client = SummaClient('localhost:8082') await client.start_and_wait() # `QueryProcessor` converts textual queries into the tree that can be # further casted to Summa DSL Query # Transformers is an extra fuctionality attached to the `QueryProcessor` # and responsible for particular tree mutations. # For example, `MorphyTransformer` can convert `Word` # node of query into `Group()` of morphologically equivalent `Word`s query_processor = QueryProcessor(transformers=[MorphyTransformer()]) query = 'three dogs' language = detect_language(query) processed_query = query_processor.process(query, language=language) summa_query = processed_query.to_summa_query() assert summa_query == { 'boolean': {'subqueries': [ {'occur': 'should', 'query': {'match': {'value': 'three'}}}, {'occur': 'should', 'query': {'match': {'value': 'dogs'}}}, {'occur': 'should', 'query': { 'boost': {'query': {'match': {'value': 'dog'}}, 'score': '0.65'}} } ]} } # Collectors are described at https://izihawa.github.io/summa/collectors # Here we are requesting `TopDocs` collector with limit 10 that means # that top-10 documents will be returned results = await client.search( summa_query, collectors=[{'top_docs': {'limit': 10}}], ) return results asyncio.run(main()) ```