Я хочу иметь возможность поиска в одной из моих пользовательских моделей страниц.
Поиск должен исключать все предопределенные page.id
, которые есть в списке, а также исключать, когда page.url_path
содержит определенное значение.
Например:
from django.db.models import Q
# The view
def search(request, search_query):
...
CustomPageModel.objects.live().exclude(
Q(id__in=list_page_ids) |
Q(url_path__icontains='notsearchable')
).search(search_query))
Это работает, когда я использую:
WAGTAILSEARCH_BACKENDS = {
'default': {
'BACKEND': 'wagtail.contrib.postgres_search.backend',
}
}
Но не работает, когда я использую:
WAGTAILSEARCH_BACKENDS = {
'default': {
'BACKEND': 'wagtail.search.backends.elasticsearch6',
...
}
}
Ошибка, которую я получаю от Elasticsearch в качестве бэкэнда:
FilterError at /search/query/
Could not apply filter on search results: "url_path__icontains = notsearchable". Lookup "icontains"" not recognised.
Elasticsearch не поддерживает icontains
.
Так как я могу исключить и выполнить поиск по той же модели?
пс. CustomModel используется в разных url_paths, поэтому не должно быть никаких изменений в самой модели.