(self, client)
| 4219 | @pytest.mark.redismod |
| 4220 | @skip_if_server_version_lt("8.4.0") |
| 4221 | def test_basic_hybrid_search(self, client): |
| 4222 | # Create index and add data |
| 4223 | self._create_hybrid_search_index(client) |
| 4224 | self._add_data_for_hybrid_search(client, items_sets=5) |
| 4225 | |
| 4226 | # set search query |
| 4227 | search_query = HybridSearchQuery("@color:{red} @color:{green}") |
| 4228 | |
| 4229 | vsim_query = HybridVsimQuery( |
| 4230 | vector_field_name="@embedding", |
| 4231 | vector_data="$vec", |
| 4232 | ) |
| 4233 | |
| 4234 | hybrid_query = HybridQuery(search_query, vsim_query) |
| 4235 | |
| 4236 | res = client.ft().hybrid_search( |
| 4237 | query=hybrid_query, |
| 4238 | params_substitution={ |
| 4239 | "vec": np.array([-100, -200, -200, -300], dtype=np.float32).tobytes() |
| 4240 | }, |
| 4241 | ) |
| 4242 | |
| 4243 | # the default results count limit is 10 |
| 4244 | if expects_resp2_shape(client) or expects_unified_shape(client): |
| 4245 | assert res.total_results == 10 |
| 4246 | assert len(res.results) == 10 |
| 4247 | assert res.warnings == [] |
| 4248 | assert res.execution_time > 0 |
| 4249 | assert all(isinstance(res.results[i]["__score"], bytes) for i in range(10)) |
| 4250 | assert all(isinstance(res.results[i]["__key"], bytes) for i in range(10)) |
| 4251 | elif expects_resp3_shape(client): |
| 4252 | assert res["total_results"] == 10 |
| 4253 | assert len(res["results"]) == 10 |
| 4254 | assert res["warnings"] == [] |
| 4255 | assert res["execution_time"] > 0 |
| 4256 | assert all( |
| 4257 | isinstance(res["results"][i]["__score"], bytes) for i in range(10) |
| 4258 | ) |
| 4259 | assert all(isinstance(res["results"][i]["__key"], bytes) for i in range(10)) |
| 4260 | |
| 4261 | @pytest.mark.redismod |
| 4262 | @skip_if_server_version_lt("8.3.224") |
nothing calls this directly
no test coverage detected