Preserve cross-field search matching

This commit is contained in:
2026-09-16 22:34:18 +03:00
parent 14e86ccdd8
commit 2c43c7c9ad
4 changed files with 20 additions and 13 deletions

View File

@@ -100,17 +100,22 @@ def tax_profit_clauses(language: str, query: str) -> list[dict]:
def build_search_query(language: str, query: str) -> dict:
registration_clauses = company_registration_clauses(language, query)
intent_clauses = [*registration_clauses, *tax_profit_clauses(language, query)]
operator = "OR" if registration_clauses else "AND"
full_text = [
clause
{
"multi_match": {
"query": variant,
"fields": [f"document_name_{language}^4", f"text_{language}"],
"type": "cross_fields",
"operator": "OR" if registration_clauses else "AND",
}
}
for variant in query_variants(language, query)
for clause in (
{"match": {f"text_{language}": {"query": variant, "operator": operator}}},
{"match": {f"document_name_{language}": {"query": variant, "operator": operator, "boost": 4}}},
{"match_phrase": {f"text_{language}": {"query": variant, "boost": 3}}},
)
]
planned = {"should": [*full_text, *intent_clauses], "minimum_should_match": 1}
phrase_matches = [
{"match_phrase": {f"text_{language}": {"query": variant, "boost": 3}}}
for variant in query_variants(language, query)
]
planned = {"should": [*full_text, *phrase_matches, *intent_clauses], "minimum_should_match": 1}
return {"bool": planned}