Трясогузка: использовать собственный анализатор для запроса ES (синонимы)

Мы пытаемся использовать анализатор, поддерживающий поиск по синонимам, со встроенной поддержкой ES7 в Wagtail. До сих пор мы могли определить анализатор и обновить индекс, но у нас нет никаких успехов в настройке анализатора при выполнении запроса.

Это настройки индекса:

'INDEX_SETTINGS': {
      'settings': {
          'index': {
              "analysis": {
                  "filter": {
                      "my_synonym_filter": {
                          "type": "synonym",
                          "synonyms": [
                              "bowtie pasta, farfalle",
                          ]
                      }
                  },
                  "analyzer": {
                      "my_synonyms": {
                          "tokenizer": "standard",
                          "filter": [
                              "lowercase",
                              "my_synonym_filter"
                          ]
                      }
                  }
              },
          }
      },
  }

И это пример полезной нагрузки поиска, которую нам нужно отправить в ES:

{
  "query": {
    "query_string": {
      "query": "farfalle",
      "analyzer": "my_synonyms"
    }
  }
}

Мы видели, что в wagtail / search / queryset.py функция поиска не позволяет передавать собственный анализатор в качестве аргумента.

class SearchableQuerySetMixin:
    def search(self, query, fields=None,
               operator=None, order_by_relevance=True, partial_match=True, backend='default'):

Есть ли способ сделать это без подкласса всех частей, задействованных в реализации ES? Вариант определения его во время индексации на уровне поля кажется чрезвычайно громоздким ('es_extra': индексирование).

В идеале мы могли бы сделать что-то вроде этого:

page_results = TranslatablePage.objects.live().filter(language_id=1).search(search_query, params={'analyzer': 'my_synonyms'}) 

0 ответов

Другие вопросы по тегам