Полнотекстовый поиск в graphene-django

Я пытаюсь реализовать полнотекстовый поиск с помощью модуля graphene-django. Есть ли способ сделать это? (Я использую реле). Я хочу передавать строку поиска в запрос get в качестве дополнительного поля.

Какую поисковую систему использовать - неважно.

Не нашел никакой полезной информации

graphene-django-filter - ваш друг!
Согласно документации, простая реализация для полнотекстового поиска выглядит следующим образом:

import graphene
from graphene_django import DjangoObjectType
from graphene_django_filter import AdvancedDjangoFilterConnectionField, AdvancedFilterSet

class UserFilter(AdvancedFilterSet):
    class Meta:
        model = User
        fields = {
            'email': ('exact', 'startswith', 'contains'),
            'first_name': ('exact', 'contains', 'full_text_search'),
            'last_name': ('exact', 'contains', 'full_text_search'),
        }

class UserType(DjangoObjectType):
    class Meta:
        model = User
        interfaces = (graphene.relay.Node,)
        fields = '__all__'
        filterset_class = UserFilter

class Query(graphene.ObjectType):
    users = AdvancedDjangoFilterConnectionField(UserType)

API полного текстового поиска включает фильтры SearchQuery, SearchRank и Trigram. Фильтры SearchQuery и SearchRank находятся на верхнем уровне. Если какое-то поле было включено для полнотекстового поиска, то оно может быть включено в массив полей. Следующий запрос показывает пример использования фильтров SearchQuery и SearchRank:

    {
  users(
    filter: {
      searchQuery: {
        vector: {
          fields: ["first_name"]
        }
        query: {
          or: [
            {value: "Bob"}
            {value: "Alice"}
          ]
        }
      }
    }
  ){
    edges {
      node {
        id
        firstName
        lastName  
      }
    }
  }
}

{
  users(
    filter: {
      searchRank: {
        vector: {fields: ["first_name", "last_name"]}
        query: {value: "John Dou"}
        lookups: {gte: 0.5}
      }
    }
  ){
    edges {
      node {
        id
        firstName
        lastName  
      }
    }
  }
}

Триграммный фильтр относится к соответствующему полю. В следующем запросе показан пример использования фильтра Trigram:
{
  users(
    filter: {
      firstName: {
        trigram: {
          value: "john"
          lookups: {gte: 0.85}
        }
      }
    }
  ){
    edges {
      node {
        id
        firstName
        lastName  
      }
    }
  }
}
Вернуться на верх