fix: linefeeds in custom_query (#3813)

* fix linefeeds in custom_query

* add double quote test case
This commit is contained in:
tstadel 2023-01-05 17:13:04 +01:00 committed by GitHub
parent 0c2d13f1b8
commit 4a0a054164
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 9 additions and 1 deletions

View File

@ -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:

View File

@ -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,