簡體   English   中英

具有文本搜索功能的Mongoengine地理空間查詢無法正常工作

[英]Mongoengine geo spatial query with text search does not work as expected

以下是我的查詢:

items = Item.objects(
                    location__near=[item_obj.longitude, item_obj.latitude],
                    location__max_distance=item_obj.range,
                    status__status=ITEM_STATUS_DISPLAYED
                ).filter(
                    Q(title__icontains=item_obj.search) |
                    Q(description__icontains=item_obj.search
                )
            ).hint([('location', '2dsphere')])

由於返回了超出范圍的對象,因此該查詢似乎不起作用。 並且項目狀態似乎也被忽略了。 范圍以米為單位。

奇怪的是,以下查詢可以正常工作:

items = Item.objects(
                    location__near=[item_obj.longitude, item_obj.latitude],
                    location__max_distance=item_obj.range,
                    status__status=ITEM_STATUS_DISPLAYED
                )

我不確定是怎么了。

我建議您遠離$ near句柄,因為mongoengine使用了不推薦使用的PyMongo調用,如果將mongoDB更新到最新版本,則應用程序將失敗。

我所做的是使用geo_within查詢,尤其是geo_within_sphere,因為我是在圍繞地球位置的圓周內找到點。 您可以在此處找到參考: MongoEngine地理查詢

他們在那里沒有解釋的一件事就是轉換半徑。 如果使用Km,則必須使用radius / 6371.0(如果使用英里),則必須做radius / 3959.0

我的查詢如下所示:

data = data_set.objects(
           location__geo_within_sphere=[[longitude, latitude], radius/6371.0]
       )

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM