3

私は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文字列も持っています..それは私のテーブルのすべての列を選択します..(*ではなく個別に)

4

1 に答える 1

1

django-sphinx を使用したプロジェクトを行ってからほぼ 1 年が経過しているため、これについては少し記憶が曖昧です。しかし、通常の列でフィルタリングできたことを知っているので、Sphinx 構成の関連部分を投稿するだけで、それが役立つかもしれません。

sphinx.conf:

sql_query_pre       =
sql_query_post      =
sql_query           = SELECT `id`, `content_type_id`, `site_id`, `user_id`, `title`, `abstract`, `summary`, `fulltext`, `approved` FROM `basedoc`
sql_query_info      = SELECT * FROM `basedoc` WHERE `id` = $id

sql_attr_uint    = content_type_id
sql_attr_uint    = site_id
sql_attr_uint    = user_id
sql_attr_uint    = approved

ご覧のとおり、非 fk 列 (承認済み) があり、django ビューでそれをフィルター処理しました。だから私はあなたの問題はあなたがsql_attr_uint代わりに必要であると推測し、文字列sql_group_columnを追加しsql_queryます。

于 2009-07-16T00:08:45.117 に答える