2009-07-15 55 views
3

我經歷的Django的獅身人面像documentation,它看起來像它允許您使用屬性來過濾搜索結果,使用屬性的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] 

從一些例子,這些屬性似乎是一些你在獅身人面像指定配置文件,而不是表中的實際列值。該配置文件允許這樣的事情,

# 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 - 是FKS,顯示出來。但上市不。

這裏是我的問題。如果我想在我的模型中使用aribtrary列foo過濾我的獅身人面像搜索結果 - 我該怎麼做?

謝謝!


編輯

在回答凡大風,

我實際使用sql_attr_uint而不是sql_group_column這裏..正如我在上面的例子中從筆者提到..連例子Django Sphinx(上面給出的鏈接)在_Sphinx字典中不顯示屬性,如果它不是FK ..(請參閱上面的「正如你可以看到的」語句)。此外,我已經有SQL_Query字符串..它選擇我的表中的所有列..(單獨,而不是*)

+0

你有解決這個問題嗎?我卡住了她... – 2010-10-27 18:39:51

回答

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_query字符串。

+0

感謝您的回答 - 但我已經在使用sql_attr_uint,並且將表中的所有列作爲select查詢的一部分。除了我不使用``來標記每個列名稱。不知道這是否會有所作爲,但我會嘗試一下。 – viksit 2009-07-16 18:27:11