Как использовать две модели для поиска по одному индексу в 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