Я используюasticsearch-dsl для поиска (включая полнотекстовый поиск) полей в моей модели. Я был в состоянии сделать модель индекса (это может быть неправильный способ выразить это) для моделей. Я использовал пример parent-child, приведенный в исходном коде gitubasticsearch-dsl здесь .
Вот так выглядят мои модели:
app_1 / models.py
class User(AbstractBaseUser):
email=models.EmailField(
verbose_name='email address',
max_length=255,
unique=True,)
username_validator = UnicodeUsernameValidator()
username = models.CharField(max_lenght=50)
first_name=models.CharField(max_length=45)
last_name=models.CharField(max_length=45)
gender = models.CharField(max_length=7)
class UserDetails(models.Model):
user=models.OneToOneField('User',on_delete=models.CASCADE)
date_of_birth=models.DateField()
street_name=models.CharField(max_length=55)
town=models.CharField(max_length=45)
country = CountryField()
app_2 / model.py
class Question(models.Model):
user=models.ForeignKey('User',on_delete=models.CASCADE)
question=models.TextField(max_length=400)
answers=models.ManyToManyField('Answer',related_name='question_answers')
upvote=models.IntegerField()
...
Моя модель Elasticsearch-dsl для была очень похожа на пример parent-child, рассмотренный выше из исходного кода github. Вот как это выглядит;
class Comment(InnerDoc):
"""
Class wrapper for nested comment objects.
"""
author = Object(User, required=True)
created = Date(required=True)
content = Text(required=True)
class Post(Document):
"""
Base class for Question and Answer containing the common fields.
"""
author = Object(User, required=True)
created = Date(required=True)
body = Text(required=True)
comments = Nested(Comment)
question_answer = Join(relations={'question': 'answer'})
...
Прошу прощения за неправильные отступы.
Как можно написать представление, которое принимает входные данные поиска, представленные пользователем, и генерирует набор запросов (эластичный поисковый запрос) для всех полей моих моделей в разных приложениях?