трясогузка и эластичный поиск не поддерживает __icontains? - PullRequest
0 голосов
/ 14 ноября 2018

Я хочу иметь возможность поиска в одной из моих пользовательских моделей страниц. Поиск должен исключать все предопределенные 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, поэтому не должно быть никаких изменений в самой модели.

...