33from wagtail .models import Site
44from wagtail .search .index import class_is_indexed
55from wagtail .search .models import Query
6+ from wagtail .search .utils import parse_query_string
67
78from .settings import grapple_settings
89from .types .structures import BasePaginatedType , PaginationType
@@ -61,6 +62,8 @@ def resolve_queryset(
6162 id = None ,
6263 order = None ,
6364 collection = None ,
65+ search_operator = "and" ,
66+ search_fields = None ,
6467 ** kwargs ,
6568):
6669 """
@@ -111,7 +114,14 @@ def resolve_queryset(
111114 query = Query .get (search_query )
112115 query .add_hit ()
113116
114- qs = qs .search (search_query , order_by_relevance = order_by_relevance )
117+ filters , parsed_query = parse_query_string (search_query , search_operator )
118+
119+ qs = qs .search (
120+ parsed_query ,
121+ order_by_relevance = order_by_relevance ,
122+ operator = search_operator ,
123+ fields = search_fields ,
124+ )
115125
116126 return _sliced_queryset (qs , limit , offset )
117127
@@ -150,7 +160,16 @@ def get_paginated_result(qs, page, per_page):
150160
151161
152162def resolve_paginated_queryset (
153- qs , info , page = None , per_page = None , search_query = None , id = None , order = None , ** kwargs
163+ qs ,
164+ info ,
165+ page = None ,
166+ per_page = None ,
167+ id = None ,
168+ order = None ,
169+ search_query = None ,
170+ search_operator = "and" ,
171+ search_fields = None ,
172+ ** kwargs ,
154173):
155174 """
156175 Add page, per_page and search capabilities to the query. This contains
@@ -164,11 +183,16 @@ def resolve_paginated_queryset(
164183 :type id: int
165184 :param per_page: The maximum number of items to include on a page.
166185 :type per_page: int
186+ :param order: Order the query set using the Django QuerySet order_by format.
187+ :type order: str
167188 :param search_query: Using Wagtail search, exclude objects that do not match
168189 the search query.
169190 :type search_query: str
170- :param order: Order the query set using the Django QuerySet order_by format.
171- :type order: str
191+ :param search_operator: The operator to use when combining search terms.
192+ Defaults to "and".
193+ :type search_operator: "and" | "or"
194+ :param search_fields: A list of fields to search. Defaults to all fields.
195+ :type search_fields: list
172196 """
173197 page = int (page or 1 )
174198 per_page = min (
@@ -196,7 +220,14 @@ def resolve_paginated_queryset(
196220 query = Query .get (search_query )
197221 query .add_hit ()
198222
199- qs = qs .search (search_query , order_by_relevance = order_by_relevance )
223+ filters , parsed_query = parse_query_string (search_query , search_operator )
224+
225+ qs = qs .search (
226+ parsed_query ,
227+ order_by_relevance = order_by_relevance ,
228+ operator = search_operator ,
229+ fields = search_fields ,
230+ )
200231
201232 return get_paginated_result (qs , page , per_page )
202233
0 commit comments