2

django-haystack を使用してモデルの全文検索を実行できるようにしたいと考えています。このモデルは PointField を使用して座標を格納します。ポイントからの距離に基づいて検索結果をフィルタリングしたい。これはヘイスタックで可能ですか? これを行うより良い方法はありますか?

from django.contrib.gis.db import models


class Listing(models.Model):
    name = models.CharField(max_length=255)
    description = models.TextField()
    location = models.PointField()
4

1 に答える 1

3

ユーザーに住所や郵便番号などの地理情報をテキスト検索に入力してもらいたいようです。これが私が行った方法ですが、まだどのようにスケーリングするかはわかりません。私はちょうど5分前にこれを終えました。

SearchForm または他のオプションの 1 つからサブクラス化されたカスタム検索フォームを作成する必要があります (私にとっては FacetedSearchForm でした)。検索方法を上書きします。

まず検索文字列を点に変えます。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)

次に、検索クエリ セットを取得します。ここでは、距離でフィルタリングした load_all_queryset() を使用できるようにするため、RelatedSearchQuerySet を使用しましたGeoDjango Distance Queriesで救助するのはGeoDjangoです。距離クエリを使用すると、距離がより小さい、より大きいなどでフィルタリングする方法を選択できます。また、任意の単位で距離自体も選択できます。

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

それは堅実なスタートになるはずです。これがあなたを正しい方向に向けることを願っています。

于 2011-09-10T08:29:25.007 に答える