2009-09-10 14 views
5

Google App Engineで連絡先データベースを構築するPythonを使い始めました。ワイルドカード検索を実装する最良の方法は何ですか?App Engineでのワイルドカード検索(

たとえば、クエリ( 'name ='、%ewman%)を実行できますか?

+1

GAE Search APIを使用して部分的に一致させるには:http://stackoverflow.com/questions/12899083/partial-matching-gae-search-api/13171181#13171181 –

答えて

11

残念ながら、一部のテキストを行うことができない、Googleのアプリエンジンは一致し

From the docs:

ヒント:クエリフィルタは、文字列値のほんの一部に一致するように明示的な方法を持っていないが、あなたは偽物できます不等式フィルタを使用してプレフィックス一致:

db.GqlQuery("SELECT * FROM MyModel WHERE prop >= :1 AND prop < :2", "abc", u"abc" + u"\ufffd") 

これは、電子と一致しましたabcという文字で始まる文字列プロパティpropを持つ非常にMyModelエンティティです。 Unicode文字列u "\ ufffd"は、可能な限り最大のUnicode文字を表します。プロパティ値がインデックスでソートされると、この範囲にある値は、指定された接頭辞で始まるすべての値になります。

+0

ありがとうございます。それは大きな制限のようです。 contacts.google.comで部分一致がどのように実装されているのだろうか?たぶん、通常のSQLデータベースに固執する必要があります。 –

+0

私は同意します。フルテキスト検索を試してやるプラグインがいくつかありますが、試していません。これは最も人気があるようです:http://code.google.com/p/app-engine-patch/ – seth

+0

SQLデータベースがフルテーブルスキャンを実行するため、「通常のSQLデータベース」を使用しても問題ありませんそのクエリを実行する - スケーラブルではありません!詳細は私の答えを見てください。 –

3

App Engineは効率的に実行できないため、「好き」のクエリを実行できません。しかし、あなたのSQLデータベースもそうすることはできません: 'foo LIKE "%bar%"'クエリは、テーブル全体を逐次スキャンすることによってのみ実行できます。

逆インデックスが必要です。基本的な全文検索は、SearchableModelでApp Engineで利用できます。 Bill Katzは拡張バージョンhereを書いています.App Engine(無料版)の商用ソリューションはhereです。