我正在浏览django-sphinx documentation,看起来它允许您使用属性过滤搜索结果,
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
但事实证明,您只能指定外键作为此值。如another example中所示,
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 - 是FK,显示出来。但是列表没有。
这就是我的问题所在。如果我想在我的模型中使用aribtrary列foo过滤我的sphinx搜索结果 - 我该怎么做?
谢谢!
修改
回答Van Gale,
我实际上在这里使用的是sql_attr_uint而不是sql_group_column ..正如我在上面的例子中提到的那样..即使是Django Sphinx的作者的例子(上面给出的链接)也没有显示_Sphinx dict中的属性if它不是FK ..(参见上面的“你能看到的”声明)。此外,我已经有SQL_Query字符串..它选择我表中的所有列..(单独,不是*)
答案 0 :(得分:1)
我用django-sphinx做了一个项目差不多一年了,所以我的记忆力有些模糊。但是,知道我能够过滤普通列,我只会发布我的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
字符串。