Я просматривал документацию django-sphinx , и похоже, что она позволяет фильтровать результаты поиска с использованием атрибутов ,
queryset = MyModel.search.query('query')
results1 = queryset.order_by('@weight', '@id', 'my_attribute')
results2 = queryset.filter(my_attribute=5)
results3 = queryset.filter(my_other_attribute=[5, 3,4])
results4 = queryset.exclude(my_attribute=5)[0:10]
В некоторых примерах эти атрибуты, по-видимому, задаются в файле конфигурации sphinx, а не являются фактическими значениями столбцов в таблице. Файл конфигурации позволяет что-то вроде этого,
# ForeignKey's
# Apparently sql_group_column is now replaced by sql_attr_uint
sql_group_column = country_id
sql_group_column = state_id
sql_group_column = listings
# DateField's and DateTimeField's
sql_date_column = date_added
Но оказывается, что вы можете указать только Foreign Keys в качестве этого значения. Как показано в другом примере ,
Class City(models.Model):
...
# Comment: The below should probly be country_id and state_id
country_id = models.ForeignKey(Country)
state_id = models.ForeignKey(State, blank=True, null=True)
listings = models.PositiveIntegerField(editable=False, default=0)
Когда результат поиска печатается, вы получаете,
print results[0]._sphinx
{'id': u'5246', 'weight': 200, 'attrs': {'state_id': 3, 'country_id': 0}}
Как видите, в attrs - state_id и country_id - FKs, отображаются. Но списки не.
И здесь кроется моя проблема. Если я хочу отфильтровать результаты поиска сфинксов с помощью столбца aribtrary foo в моей модели - как бы я это сделал?
Спасибо!
Редактировать
В ответ Ван Гэйлу,
Я на самом деле использую sql_attr_uint, а не sql_group_column здесь ... и, как я уже упоминал в приведенном выше примере ... даже в примере от автора Django Sphinx (ссылка приведена выше) не отображается атрибут в dict _Sphinx, если это не FK .. (см. утверждение «Как вы можете видеть» выше). Кроме того, у меня уже есть строка SQL_Query .. она выбирает все столбцы в моей таблице .. (индивидуально, а не *)