Как использовать две модели для поиска по одному индексу в sphinx-django
0 Uday Swami [2018-02-23 14:35:00]
Я использую django-sphinxql для поиска в моем проекте django. Я хочу использовать две модели в своем приложении для поиска с некоторым запросом. Модели выглядят ниже
Class Model1(models.Model):
name = models.CharField(max_length=50)
model2 = models.ForeignKey(Model2, on_delete=models.CASCADE)
Class Model2(models.Model):
caption = models.CharField(max_length=50)
Я хочу включить поиск как полей имени, так и надписей выше, таких, что Model1 возвращается для любых совпадений, например, если query = "abc" соответствует заголовку, ответ должен быть Model1, Как бы я достиг этого, я создал индекс для Model1, но дон Не знаю, как добавить в него надпись от Model2. Мой индекс для модели 1 ниже
class Model1Index(indexes.Index):
name = fields.Text(model_attr='name')
class Meta:
model = Model1
settings.INDEXES['source_params'] = {'sql_field_string': ['name'],}
Быстрая помощь ценится.
django search sphinx sphinxql django-sphinx
1 ответ
0 Решение Uday Swami [2018-03-05 14:47:00]
Для полей внешних ключей в Sphinx мы можем использовать двойные подчеркивания (__), чтобы указать на конкретное поле для индексирования. Пользователь model_attr
для этого
В приведенном выше примере
class Model1Index(indexes.Index): name = fields.Text(model_attr='name') caption = fields.Text(model_attr='model2__caption') class Meta: model = Model1 settings.INDEXES['source_params'] = {'sql_field_string': ['name'],}
может быть определена.
Ссылка http://django-sphinxql.readthedocs.io/en/latest/indexes.html