From 4a0a0541645e699036e4b6b18d783cb2c864d4fc Mon Sep 17 00:00:00 2001 From: tstadel <60758086+tstadel@users.noreply.github.com> Date: Thu, 5 Jan 2023 17:13:04 +0100 Subject: [PATCH] fix: linefeeds in custom_query (#3813) * fix linefeeds in custom_query * add double quote test case --- haystack/document_stores/search_engine.py | 2 +- test/nodes/test_retriever.py | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/haystack/document_stores/search_engine.py b/haystack/document_stores/search_engine.py index d117a20eb..10bd1638b 100644 --- a/haystack/document_stores/search_engine.py +++ b/haystack/document_stores/search_engine.py @@ -1064,7 +1064,7 @@ class SearchEngineDocumentStore(KeywordDocumentStore): elif custom_query: # substitute placeholder for query and filters for the custom_query template string template = Template(custom_query) # replace all "${query}" placeholder(s) with query - substitutions = {"query": f'"{query}"'} + substitutions = {"query": json.dumps(query)} # For each filter we got passed, we'll try to find & replace the corresponding placeholder in the template # Example: filters={"years":[2018]} => replaces {$years} in custom_query with '[2018]' if filters: diff --git a/test/nodes/test_retriever.py b/test/nodes/test_retriever.py index 42232953e..b7cd3cbc7 100644 --- a/test/nodes/test_retriever.py +++ b/test/nodes/test_retriever.py @@ -272,6 +272,14 @@ def test_elasticsearch_custom_query(): results = retriever.retrieve(query="test", filters={"years": ["2020", "2021"]}) assert len(results) == 4 + # test linefeeds in query + results = retriever.retrieve(query="test\n", filters={"years": ["2020", "2021"]}) + assert len(results) == 3 + + # test double quote in query + results = retriever.retrieve(query='test"', filters={"years": ["2020", "2021"]}) + assert len(results) == 3 + # test custom "term" query retriever = BM25Retriever( document_store=document_store,