2016-04-16 13 views
1

私は不動産アプリを扱っています。 Aホームは、価格、ベッドルーム、バスルーム、SqFt、ロットサイズなどの典型的な特性を有するでしょう。ユーザーは家を検索します。そのようなクエリは、xとyの間の価格、zより大きい部屋、 pよりも...等Google Datastore - 検索の最適化手法

私は複数の不等式フィルタが許可されていないことを知っています。私はまた、私のコードでフィルタリングを実行したくない/私はカーソルを使用できるようにするためです。

私は2つのソリューションを考え出しました。私はこれらが正しいかどうか確信していません - もし専門家が光を放つことができるかどうか疑問に思ってください。

解決策1:私は各属性の値を離散し、リストフィールドに保存してからINを使います。例:3ベッドルームがある場合、ベッド= 3を格納する代わりに、ベッド= [1,2,3]を格納します。今、ユーザーが少なくとも2つの寝室を持つ家を探している場合、フィルターをbeds> 2として書くのではなく、フィルターを "beds IN [2]"と書いてみましょう - そして私の家は[1,2,3] 2ベッド[1,2]または4ベッド[1,2,3,4]などのいずれの家も同様です。

解決策2:これは最初のものと似ていますが、 list-propertyでは、実際に属性(列)を家に追加します。 3ベッドルームの家には、次の属性/列/プロパティがあります。col-bed-1:true、col-bed-2:true、col-bed-3:true今、ユーザーが少なくとも2つの寝室を持つ家を探している場合、フィルターをベッド> 2として書くのではなく、フィルターを "col-bed-2 = true"と書いて、私の家は適格になります。 1. 2. 性能とGoogleの価格設定の観点からの両方があります優れている1:2つのベッド、3つのベッド、4つのベッド、そう

に私は両方のソリューションが動作します知っているが、私は知りたいと家これを行うためのよりよい解決法ですか?

+0

精度を制限しない限り、これは価格では機能しません(たとえば、離散$ 50ごとに) –

答えて

1

私はほぼ完全にあなたのユースケースをpython gaeアプリで紹介しています(craigslistに似ています)。私はPythonでそれを書いて、フィルターを使って検索するのは機能していて簡単です。

言語を選択する必要があります。Python、Java、Goのいずれかを選択してから、Google Search API(等価性または不等式のフィルタが組み込まれています)を使用し、検索APIを使用してクエリできるデータストアインデックスを作成します。

たとえば、次のようなpythonクラスを使用してデータストアにデータを入力し、Search 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が役に立ちます。

+1

データセットの大きさはどれですか? Google Search APIには複数の不等式フィルタが組み込まれているので、どのようにパフォーマンスが向上するのだろうか。 –

+1

私のインデックスは約1GBで、私のデータは約1GB +たくさんのブロブです。私はブロブストアにブロブを格納し、ブロブが最も多くのスペースをとります。さて、検索は高速ではありませんが、それはうまく動作します。 –