連絡先データベースを構築する Google App Engine で Python を使い始めたところです。ワイルドカード検索を実装する最良の方法は何ですか?
たとえば、query('name=', %ewman%) を実行できますか?
連絡先データベースを構築する Google App Engine で Python を使い始めたところです。ワイルドカード検索を実装する最良の方法は何ですか?
たとえば、query('name=', %ewman%) を実行できますか?
残念ながら、Google アプリ エンジンは部分的なテキスト マッチを行うことができません
ヒント: クエリ フィルターには、文字列値の一部のみを照合する明示的な方法はありませんが、不等式フィルターを使用してプレフィックス マッチを偽装できます。
db.GqlQuery("SELECT * FROM MyModel WHERE prop >= :1 AND prop < :2", "abc", u"abc" + u"\ufffd")
これは、文字 abc で始まる文字列プロパティ prop を持つすべての MyModel エンティティに一致します。Unicode 文字列 u"\ufffd" は、可能な最大の Unicode 文字を表します。プロパティ値がインデックスで並べ替えられている場合、この範囲に含まれる値は、指定されたプレフィックスで始まるすべての値です。
App Engine は「like」クエリを効率的に実行できないため、実行できません。ただし、SQL データベースも同様です。'foo LIKE "%bar%"' クエリは、テーブル全体に対してシーケンシャル スキャンを実行することによってのみ実行できます。
必要なのは逆索引です。基本的な全文検索は、 App Engine でSearchableModelを使用して利用できます。Bill Katz は拡張版をここに書いています。App Engine 用の商用ソリューション (無料版) は、ここから入手できます。