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

@@ -38,7 +38,9 @@ class SearchRelevanceTest(unittest.TestCase):
self.assertFalse(body["track_total_hits"])
self.assertEqual(body["collapse"], {"field": "document_code"})
self.assertIn({"term": {"is_current_edition": True}}, body["query"]["bool"]["filter"])
lexical_query = body["query"]["bool"]["must"]["bool"]["should"][0]["match"]["text_ru"]
lexical_query = body["query"]["bool"]["must"]["bool"]["should"][0]["multi_match"]
self.assertEqual(lexical_query["type"], "cross_fields")
self.assertEqual(lexical_query["fields"], ["document_name_ru^4", "text_ru"])
self.assertEqual(lexical_query["operator"], "AND")
self.assertTrue(any("match_phrase" in clause for clause in body["query"]["bool"]["must"]["bool"]["should"]))
@@ -56,8 +58,8 @@ class SearchRelevanceTest(unittest.TestCase):
search_query = body["query"]["bool"]["must"]["bool"]
self.assertEqual(search_query["minimum_should_match"], 1)
self.assertNotIn("filter", search_query)
lexical = [clause["match"] for clause in search_query["should"] if "match" in clause]
self.assertTrue(all(next(iter(clause.values()))["operator"] == "OR" for clause in lexical))
lexical = [clause["multi_match"] for clause in search_query["should"] if "multi_match" in clause]
self.assertTrue(all(clause["type"] == "cross_fields" and clause["operator"] == "OR" for clause in lexical))
boosts = [clause["constant_score"] for clause in search_query["should"] if "constant_score" in clause]
self.assertEqual([item["boost"] for item in boosts], [boost for _, boost in COMPANY_REGISTRATION_DOCUMENTS])
self.assertEqual(