Preserve cross-field search matching
This commit is contained in:
@@ -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}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user