Полнотекстовый поиск в 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
}
}
}
}