diff --git a/CHANGES.rst b/CHANGES.rst index 8915e4d..8ddae44 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -4,7 +4,8 @@ Changelog 5.2.1 (unreleased) ------------------ -- Nothing changed yet. +- Ignore non-existing indexes in custom ranking. + [cekk] 5.2.0 (2023-08-21) diff --git a/src/redturtle/volto/restapi/services/search/get.py b/src/redturtle/volto/restapi/services/search/get.py index 30541cf..12b61a0 100644 --- a/src/redturtle/volto/restapi/services/search/get.py +++ b/src/redturtle/volto/restapi/services/search/get.py @@ -90,10 +90,15 @@ def search(self, query=None): queries.append(Eq(key, value["query"])) elif key in ("b_start", "b_size"): continue + elif index_type is None: + # skip, non-existent index + continue else: logger.warning( f"Unsupported query parameter: {key} {index_type} {value}. Fall back to the standard query." ) + query = self.request.form.copy() + query = unflatten_dotted_dict(query) return super(SearchHandler, self).search(query) # term = query.pop("SearchableText") @@ -118,8 +123,7 @@ def search(self, query=None): ) return results - else: - return super(SearchHandler, self).search(query) + return super(SearchHandler, self).search(query) def _parse_query(self, query): query = super()._parse_query(query) diff --git a/src/redturtle/volto/tests/test_advancedsearch.py b/src/redturtle/volto/tests/test_advancedsearch.py index e792da2..b7ffc95 100644 --- a/src/redturtle/volto/tests/test_advancedsearch.py +++ b/src/redturtle/volto/tests/test_advancedsearch.py @@ -166,6 +166,34 @@ def test_search_by_not_handled_index_type_return_standard_order(self): ["f1", "d1", "e1"], [item["@id"].split("/")[-1] for item in result["items"]] ) + def test_search_ignore_non_existent_indexes_and_return_custom_order_if_possible( + self, + ): + response = self.api_session.get( + "/@search", params={"SearchableText": "foo", "xxx": True} + ) + result = response.json() + self.assertEqual(result["items_total"], 3) + self.assertEqual( + ["d1", "f1", "e1"], [item["@id"].split("/")[-1] for item in result["items"]] + ) + + # now repeat query with not handled index, and return standard order + response = self.api_session.get( + "/@search", + params={ + "SearchableText": "foo", + "created.query": f"{DateTime().Date()}:00:00", + "created.range": "min", + "xxx": True, + }, + ) + result = response.json() + self.assertEqual(result["items_total"], 3) + self.assertEqual( + ["f1", "d1", "e1"], [item["@id"].split("/")[-1] for item in result["items"]] + ) + class AdvancedSearchWithFlagTest(BaseTest): def test_by_default_flag_is_disabled(self):