def search(term: str, count: int, artist_name="", min_rating=0) -> List[SearchResult]: client = Elasticsearch() client.transport.connection_pool.connection.headers.update(HEADERS) context = False s = Search(using=client, index=INDEX_NAME, doc_type=DOC_TYPE) print(("t", term, artist_name, min_rating)) if "*" in term: print("Wild card used") query = {"wildcard": {"track_name_si": term}} docs = s.query(query)[:count].execute() return [SearchResult.from_doc(d) for d in docs] if "ජනප්රියම" in term or "හොඳම" in term: print("Top result search executed") top_k = [int(s) for s in term.split() if s.isdigit()][0] query = search_top_songs() docs = s.query(query).sort("ranking")[:top_k].execute() return [SearchResult.from_doc(d) for d in docs] if "අහන සින්දු" in term or "කියන සින්දු" in term: if "දුක" in term: query = situational_query("sad") elif "යාලුවො" in term: query = situational_query("friends") else: query = situational_query("") docs = s.query(query)[:count].execute() return [SearchResult.from_doc(d) for d in docs] if "ගැන" in term or "පිළිබඳ" in term: context = True term = clean_search(term) query = create_query(term, min_rating, artist_name, context=context) docs = s.query(query)[:count].execute() if len(docs) < 3 and artist_name == '': query = create_query(term, min_rating, artist_name, fuzzy=True) docs = s.query(query)[:count].execute() # if len(docs) < 3 and artist_name != "" and term == "": print("Artist search executed") query = search_artist(artist_name) docs = s.query(query)[:count].execute() print("Final query: ", query) return [SearchResult.from_doc(d) for d in docs]