Blame view

tests/test_es_query_builder.py 2.41 KB
7fbca0d7   tangwang   启动脚本优化
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
  from types import SimpleNamespace
  
  import numpy as np
  
  from search.es_query_builder import ESQueryBuilder
  
  
  def _builder() -> ESQueryBuilder:
      return ESQueryBuilder(
          match_fields=["title.en^3.0", "brief.en^1.0"],
          text_embedding_field="title_embedding",
          default_language="en",
      )
  
  
  def test_knn_prefilter_includes_range_filters():
      qb = _builder()
      q = qb.build_query(
          query_text="bags",
          query_vector=np.array([0.1, 0.2, 0.3]),
          range_filters={"min_price": {"gte": 50, "lt": 100}},
          enable_knn=True,
      )
  
      assert "knn" in q
      assert q["knn"]["filter"] == {"range": {"min_price": {"gte": 50, "lt": 100}}}
  
  
  def test_knn_prefilter_uses_only_conjunctive_filters_when_disjunctive_present():
      qb = _builder()
      facets = [SimpleNamespace(field="category_name", disjunctive=True)]
      q = qb.build_query(
          query_text="bags",
          query_vector=np.array([0.1, 0.2, 0.3]),
          filters={"category_name": ["A", "B"], "vendor": "Nike"},
          range_filters={"min_price": {"gte": 50, "lt": 100}},
          facet_configs=facets,
          enable_knn=True,
      )
  
      assert "knn" in q
      assert "filter" in q["knn"]
      knn_filter = q["knn"]["filter"]
      assert knn_filter == {
          "bool": {
              "filter": [
                  {"term": {"vendor": "Nike"}},
                  {"range": {"min_price": {"gte": 50, "lt": 100}}},
              ]
          }
      }
      assert q["post_filter"] == {"terms": {"category_name": ["A", "B"]}}
  
  
  def test_knn_prefilter_not_added_without_filters():
      qb = _builder()
      q = qb.build_query(
          query_text="bags",
          query_vector=np.array([0.1, 0.2, 0.3]),
          enable_knn=True,
      )
  
      assert "knn" in q
      assert "filter" not in q["knn"]
a8261ece   tangwang   检索效果优化
65
      assert q["knn"]["_name"] == "knn_query"
c90f80ed   tangwang   相关性优化
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
  
  
  def test_text_query_contains_only_base_translation_and_fallback_named_queries():
      qb = _builder()
      parsed_query = SimpleNamespace(
          query_text_by_lang={"en": "dress", "zh": "连衣裙"},
          search_langs=["en", "zh"],
          detected_language="en",
          source_in_index_languages=False,
          index_languages=["en", "zh", "fr"],
      )
  
      q = qb.build_query(query_text="dress", parsed_query=parsed_query, enable_knn=False)
      should = q["query"]["bool"]["should"]
      names = [clause["multi_match"]["_name"] for clause in should]
  
      assert names == ["base_query", "base_query_trans_zh", "fallback_original_query_fr"]