2011-09-09 5 views
2

는 전 모델에 전체 텍스트 검색을 할 장고 - 건초 더미를 사용할 수 있어야합니다. 이 모델은 PointField를 사용하여 좌표를 저장합니다. 한 지점에서 거리를 기준으로 검색 결과를 필터링하고 싶습니다. Haystack에서 가능합니까? 이 작업을 수행하는 더 좋은 방법이 있습니까?Haystack을 geodjango PointField로 필터링 할 수 있습니까?

+0

업데이트 : 건초 더미에서 2.0로, 공간 검색이 implimented하고 있으며, geodjango 필드와 매우 잘 작동합니다. – agabel

+0

안녕하세요 @ 아가벨. Haystack 2.0 및 geodjango를 사용하여 문제를 해결하는 데 도움이되는 코드 샘플을 게시 할 수 있습니까? 감사! –

답변

3

사용자가 텍스트 검색에 주소 나 우편 번호와 같은 지리 정보를 입력하는 것처럼 들리는 것 같습니다. 이것은 그것이 어떻게 비례하는지 아직 잘 모르겠지만 어떻게 했는가? 방금 5 분 전에 끝냈어.

You should create a custom search form

는 SearchForm에서 서브 클래스 나 (나를 위해 그것을 FacetedSearchForm했다) 다른 옵션 중 하나. 검색 방법을 덮어 씁니다.

첫째는 점에 검색 문자열을 설정합니다. 그것은 (당신이 load_all_queryset을 사용할 수 있기 때문에 http://code.google.com/p/geopy/wiki/GettingStarted

class MainSearchForm(FacetedSearchForm): 

    def search(self): 

     query = self.cleaned_data['q'] 
     g = geocoders.Google() 
     place, (lat, lng) = g.geocode('%s' % query) 
     pnt = fromstr('POINT(%s %s)' % (lng, lat), srid=4326) 

그런 다음 검색 쿼리 설정을, 나는 거리에 의해 필터링 곳이다) RelatedSearchQuerySet을 사용했다. GeoDjango가 구출에 GeoDjango Distance Queries으로 있습니다. 거리 쿼리를 사용하면 원하는 거리 단위, 거리보다 큰 거리 및 거리 자체를 필터링하는 방법을 선택할 수 있습니다.

 sqs = RelatedSearchQuerySet().load_all() 
     sqs = sqs.load_all_queryset(Listing, 
            Listing.objects.filter(location__distance_lte=(pnt, D(mi=20)))) 
     return sqs 

견고한 시작이어야합니다. 희망이 올바른 방향으로 당신을 가리 킵니다.

관련 문제