私は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
しかし、この値として指定できるのは外部キーのみであることが判明しました。別の例に示すように、
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}}
ご覧のとおり、属性 (state_id と country_id) に FK が表示されます。しかし、リスティングはそうではありません。
そして、ここに私の問題があります。モデルで任意の列 foo を使用してスフィンクスの検索結果をフィルタリングしたい場合、どうすればよいですか?
ありがとう!
編集
ヴァン・ゲイルに答えて、
私は実際にここで sql_group_column ではなく sql_attr_uint を使用しています..そして上記の例で述べたように.. Django Sphinx の作成者の例(上記のリンク)でさえ、属性が _Sphinx dict でない場合は表示されませんFK .. (上記の「ご覧のとおり」ステートメントを参照してください)。また、私はすでにSQL_Query文字列も持っています..それは私のテーブルのすべての列を選択します..(*ではなく個別に)