From ed47d577da57d16fbdc36f39e4e82110fdfe0665 Mon Sep 17 00:00:00 2001 From: Drini Cami Date: Wed, 4 Jan 2023 16:04:31 -0500 Subject: [PATCH] Fix publishers pages showing no books --- openlibrary/plugins/worksearch/subjects.py | 1 + openlibrary/solr/query_utils.py | 8 +++++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/openlibrary/plugins/worksearch/subjects.py b/openlibrary/plugins/worksearch/subjects.py index bfdeccbf5f8..03a18e1ef9a 100644 --- a/openlibrary/plugins/worksearch/subjects.py +++ b/openlibrary/plugins/worksearch/subjects.py @@ -255,6 +255,7 @@ def get_subject( 'q': query_dict_to_str( {meta.facet_key: self.normalize_key(meta.path)}, unescaped=unescaped_filters, + phrase=True, ), **filters, }, diff --git a/openlibrary/solr/query_utils.py b/openlibrary/solr/query_utils.py index 33967ee0b30..116733bb4cc 100644 --- a/openlibrary/solr/query_utils.py +++ b/openlibrary/solr/query_utils.py @@ -232,6 +232,7 @@ def query_dict_to_str( escaped: dict | None = None, unescaped: dict | None = None, op: Literal['AND', 'OR', ''] = '', + phrase: bool = False, ) -> str: """ Converts a query dict to a search query. @@ -246,11 +247,16 @@ def query_dict_to_str( 'title:(foo \\\\? to escape)' >>> query_dict_to_str({'title': 'YES AND'}) 'title:(YES and)' + >>> query_dict_to_str({'publisher_facet': 'Running Press'}, phrase=True) + 'publisher_facet:"Running Press"' """ result = '' if escaped: result += f' {op} '.join( - f'{k}:({fully_escape_query(v)})' for k, v in escaped.items() + f'{k}:"{fully_escape_query(v)}"' + if phrase + else f'{k}:({fully_escape_query(v)})' + for k, v in escaped.items() ) if unescaped: if result: