diff --git a/backend/search/query.py b/backend/search/query.py index 9a308b0..e108dfc 100644 --- a/backend/search/query.py +++ b/backend/search/query.py @@ -11,17 +11,14 @@ from search.minjust_opensearch import APP_VERSION, request_json def company_registration_clauses(language: str, query: str) -> list[dict]: - tokens = set(re.findall(r"\w+", query.casefold())) - intent = { - "ru": ("осоо", ("как", "порядок", "процедура"), ("откр", "созд", "зарегистр"), ("счет", "счёт", "филиал"), "Действует"), - "ky": ("жчк", ("кантип", "тартиби"), ("ач", "түз", "кат"), ("эсеп", "эсеб", "филиал"), "Күчүндө"), + patterns = { + "ru": (r"\bкак\s+откры\w*\s+осоо\b", r"\b(порядок|процедура)\s+откры\w*\s+осоо\b", r"\bкак\s+зарегистр\w*\s+осоо\b"), + "ky": (r"\bжчк\s+ач\w*\s+тартиби\b", r"\bжчк\s+кантип\s+ач\w*\b"), }[language] - entity, procedure_terms, action_prefixes, excluded_terms, status = intent - if entity not in tokens or any(token.startswith(term) for token in tokens for term in excluded_terms) or not tokens.intersection(procedure_terms) or not any( - token.startswith(prefix) for token in tokens for prefix in action_prefixes - ): + if not any(re.search(pattern, query.casefold()) for pattern in patterns): return [] + status = {"ru": "Действует", "ky": "Күчүндө"}[language] # ponytail: curated legal mapping; replace with a reviewed intent catalog when coverage expands. def clause(document_code: str, boost: int) -> dict: return { diff --git a/backend/test_search_relevance.py b/backend/test_search_relevance.py index 29a5149..6ca7101 100644 --- a/backend/test_search_relevance.py +++ b/backend/test_search_relevance.py @@ -61,8 +61,12 @@ class SearchRelevanceTest(unittest.TestCase): ("ru", "кто зарегистрировал ОсОО"), ("ru", "как открыть счет ОсОО"), ("ru", "как открыть филиал ОсОО"), + ("ru", "как создать договор для ОсОО"), + ("ru", "порядок создания логотипа ОсОО"), ("ky", "ЖЧК ачык маалымат"), ("ky", "ЖЧК кантип банк эсебин ачуу"), + ("ky", "ЖЧК кантип келишим түзүү"), + ("ky", "ЖЧК кантип логотип түзүү"), ): body = json.loads(build_search_body(language, query, 10)) self.assertNotIn("should", body["query"]["bool"])