2009-07-15 6 views
3

몇 가지 예에서속성을 사용한 장고 - 스핑크스 결과 필터링?

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] 

, 나는 장고 - 스핑크스 documentation를 통과되었고, 그것은 당신이 속성 사용하여 검색 결과를 필터링 할 수 있습니다 것 같습니다, 이러한 특성은 스핑크스에서 지정한 뭔가 것 같다 표의 실제 열 값이 아닌 구성 파일을 사용하십시오. 구성 파일은,

# 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 

을 이런 식으로 뭔가를 할 수 있습니다하지만 당신은이 값으로 외래 키을 지정할 수 있습니다 것으로 나타났다. STATE_ID와 country_id - - 인 FKS이 표시는 attrs에에서 볼 수있는 바와 같이

print results[0]._sphinx 
{'id': u'5246', 'weight': 200, 'attrs': {'state_id': 3, 'country_id': 0}} 

, 검색 결과를 인쇄 할 때

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) 

, 당신은 얻을 another example에 나와 있습니다. 그러나 목록은 그렇지 않습니다.

여기 내 문제가 있습니다. 내 모델에서 임의의 열 foo를 사용하여 스핑크스 검색 결과를 필터링하려면 어떻게해야합니까?

감사합니다.


편집 반 게일에 대한 답변에서

,

실제로 .. 오히려 여기 sql_group_column보다 sql_attr_uint를 사용하고있어 나는 저자에서 .. 위의 예에서도 예를 언급 한 바와 같이 Django Sphinx (위의 링크)는 _Sphinx dict의 속성을 FK가 아닌 경우 표시하지 않습니다 (위의 "알 수 있듯이"참조). 또한, 이미 SQL_Query 문자열도 가지고 있습니다. 내 테이블의 모든 열을 선택합니다. (개별적으로 * 아닙니다)

+0

이 문제에 대한 해결책을 얻었습니까? 나는 그녀를 찔렀다 ... –

답변

1

장고 - 스핑크스를 사용하여 프로젝트를 한 지 거의 1 년이되었으므로 내 메모리는 이것에 조금 어렴풋이 보인다. 그러나 필자는 정상적인 열을 필터링 할 수 있음을 알고, 필자는 스핑크스 구성의 관련 부분을 게시하고 아마도 도움이 될 것입니다.

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 열을 (승인)했고, 장고보기에서 필터링을했다. 따라서 귀하의 문제는 대신 sql_attr_uint이 필요하고 sql_query 문자열을 추가하는 것입니다.

+0

답변을 주셔서 감사합니다. -하지만 이미 sql_attr_uint를 사용하고 있으며 선택 쿼리의 일부로 내 테이블의 모든 열을 가지고 있습니다. 제외하고 각 열 이름을 표시하기 위해''를 사용하지 않습니다. 그것이 혼자서 변화를 가져올 지 확신 할 수는 없지만 시도해 볼 것입니다. – viksit

+0

Btw - 아직이 문제가 붙어 있습니다. 궁금한 점이 있습니다. 어떻게 필터링 결과를 볼 수 있었습니까? 아마도 그게 내가 잘못하고있는 것일까요? – viksit

+0

django-sphinx를 사용하여 프로토 타입 프로젝트를 작업 할 때 필터가 제대로 재설정되지 않는 버그가있었습니다. 필터를 사용하면 원치 않는 경우에도 항상 모든 검색에 적용됩니다. 이후 수정되었지만이 버그로 인해 필터를 사용할 수 없었습니다. 나는 그것을 사용해야했다.query() 메소드를 호출 한 다음 수동으로 레코드 ID를 직접 필터링하십시오. 필터를 사용한 방법을 보여주기 위해 내 게시물을 수정하고 재설정 문제 이외에 나를 위해 작동했기 때문입니다. –