Google数据存储区 - 搜索优化技术

时间:2016-04-16 19:01:47

标签: google-app-engine google-cloud-datastore

我正在处理一个房地产应用程序。一个家庭将拥有典型的物业,如价格,床房,浴室,SqFt,地块大小等。用户将搜索家庭和这样的查询将需要多个不等的过滤器,如:x和y之间的价格,房间大于z,浴室更多比...等...

我知道不允许使用多个不等式过滤器。我也不想在我的代码和/中执行任何过滤,因为我希望能够使用游标。

所以我提出了两个解决方案。我不确定这些是否正确 - 所以想知道大师是否可以解决这些问题

解决方案1:我将离散每个属性的值并将它们保存在列表字段中,然后使用IN。例如:如果有3个卧室,而不是存储床= 3,我将存储床= [1,2,3]。现在,如果用户搜索至少有两间卧室的房屋,那么我将把过滤器写为"床IN [2]"而不是将过滤器写为床> 2。 - 我家[1,2,3]以上的房屋也符合条件 - 任何有2张床[1,2]或4张床[1,2,3,4]等的房屋也是如此

解决方案2:它与第一个类似但不是创建list-property,而是实际上将属性(列)添加到home。因此,拥有3间卧室的房屋将具有以下属性/列/属性:col-bed-1:true,col-bed-2:true,col-bed-3:true。现在,如果用户搜索至少有两间卧室的房屋,那么我将把过滤器写成" col-bed-2 = true"而不是将过滤器写为床> 2。 - 我家将符合条件 - 任何有2张床,3张床,4张床等的家庭也是如此。

我知道这两种解决方案都有效,但我想知道: 从性能和谷歌定价的角度来看哪一个更好 2.有更好的解决方案吗?

1 个答案:

答案 0 :(得分:1)

我几乎完全使用python gae应用程序来查看带有住房广告的帖子(类似于craigslist)。我在python中编写它并使用过滤器进行搜索工作且简单明了。

您应该选择一种语言:Python,Java或Go,然后使用Google Search API(具有内置的均衡或不等式过滤)并构建可以使用搜索API查询的数据存储索引。

例如,您可以使用如下所示的python类来填充数据存储区,然后使用搜索API。

class Home(db.Model):
    address = db.StringProperty(verbose_name='address')
    number_of_rooms = db.IntegerProperty()
    size = db.FloatProperty()
    added = db.DateTimeProperty(verbose_name='added', auto_now_add=True)  # readonly
    last_modified = db.DateTimeProperty(required=True, auto_now=True)
    timestamp = db.DateTimeProperty(auto_now=True)  #
    image_url = db.URLProperty();

我绝对认为你应该避免存储排列有几个原因:排列可能会爆炸,并且使代码难以阅读。相反,你应该像我一样做,并找到其他人已经解决了相同或类似问题的例子。

This appengine demo可能会对您有所帮助。