From f0bce7cf3341640859ed9ab7f4bcb42e797f14f6 Mon Sep 17 00:00:00 2001 From: Vatsal <36672090+imvtsl@users.noreply.github.com> Date: Tue, 9 Jul 2024 09:39:19 -0700 Subject: [PATCH] Fixed issue 769:Collapse not preserved when chaining a search instance (#771) * Fixed issue 769:Collapse not preserved when chaining a search instance Signed-off-by: vatsal * Fixed issue 769:Collapse not preserved when chaining a search instance Signed-off-by: vatsal * Fixed issue 769:Collapse not preserved when chaining a search instance Signed-off-by: vatsal * Fixed issue 769:Collapse not preserved when chaining a search instance Signed-off-by: vatsal * Fixed issue 769:Collapse not preserved when chaining a search instance Signed-off-by: vatsal --------- Signed-off-by: vatsal --- CHANGELOG.md | 1 + opensearchpy/helpers/search.py | 1 + test_opensearchpy/test_helpers/test_search.py | 16 ++++++++++++++++ 3 files changed, 18 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1d3e1115..33856463 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ Inspired from [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) ### Deprecated ### Removed ### Fixed +- Fixed Search helper to ensure proper retention of the _collapse attribute in chained operations. ([#771](https://github.com/opensearch-project/opensearch-py/pull/771)) ### Updated APIs - Updated opensearch-py APIs to reflect [opensearch-api-specification@7452827](https://github.com/opensearch-project/opensearch-api-specification/commit/745282767026703ea27967d2705633c3e2661c97) - Updated opensearch-py APIs to reflect [opensearch-api-specification@f2afd71](https://github.com/opensearch-project/opensearch-api-specification/commit/f2afd7171406c7477fbd644d74087bb0e2948c75) diff --git a/opensearchpy/helpers/search.py b/opensearchpy/helpers/search.py index 5693e916..aa157b10 100644 --- a/opensearchpy/helpers/search.py +++ b/opensearchpy/helpers/search.py @@ -431,6 +431,7 @@ class Search(Request): s._highlight_opts = self._highlight_opts.copy() s._suggest = self._suggest.copy() s._script_fields = self._script_fields.copy() + s._collapse = self._collapse.copy() for x in ("query", "post_filter"): getattr(s, x)._proxied = getattr(self, x)._proxied diff --git a/test_opensearchpy/test_helpers/test_search.py b/test_opensearchpy/test_helpers/test_search.py index c7fa20c5..4bb6cdb5 100644 --- a/test_opensearchpy/test_helpers/test_search.py +++ b/test_opensearchpy/test_helpers/test_search.py @@ -622,3 +622,19 @@ def test_rescore_query_to_dict() -> None: }, }, } + + +def test_collapse_chaining() -> None: + s = search.Search(index="index_name") + s = s.filter("term", color="red") + s = s.collapse(field="category") + s = s.filter("term", brand="something") + + assert { + "query": { + "bool": { + "filter": [{"term": {"color": "red"}}, {"term": {"brand": "something"}}] + } + }, + "collapse": {"field": "category"}, + } == s.to_dict()