3

Google アプリ エンジンにテキスト検索が追加されたことがわかります: https://developers.google.com/appengine/docs/python/search/overview

これには、文字列内の部分文字列の検索が含まれますか?

私が尋ねる理由は、名前や電話番号などのフィールドの部分文字列検索を可能にするコードを以前に書いていたからです。たとえば、「San」を検索すると、「Mike DaSantos」のような結果が表示されます。これは、オートコンプリートのようなものにとっては素晴らしいものでした。

ただし、これには膨大な量の書き込み操作が必要なため、コストの問題が発生しました。これを行った各フィールドには、文字列内の文字のサブセットごとに書き込み操作が必要だったため、おおよそ O((n*n+1)/2) の書き込み操作が必要でした。これにより、6,000 人の顧客の電話番号、名前、電子メール アドレス、および住所のインデックス作成に関して、数ドルのアプリ エンジン コストが追加されました。

検索 API を使用すると、この機能を低コストで提供できるのではないでしょうか?

本当にありがとう!

4

2 に答える 2

4

いいえ、そうではありません。

検索できる「ワイルドカード」は複数形のみです。

~"car"  # searches for "car" and "cars"

ただし、できることは、同じフィールドに複数のトークンを保存することです。TextSearchServletで例を参照してください。

  StringTokenizer tokenizer = new StringTokenizer(tagStr, ",");
  while (tokenizer.hasMoreTokens()) {
    docBuilder.addField(Field.newBuilder().setName("tag")
        .setAtom(tokenizer.nextToken()));
  }

したがって、たとえば「nametag」フィールドを照会し、名前をトークン化して「Mike DaSantos」を取得すると仮定すると、「Mike DaSantos」が返されます。

  Results<ScoredDocument> results = getIndex().search("nametag:San"); 

ここでのコストと割り当てについては明確ではありません。

于 2012-08-11T00:36:12.237 に答える
1

ところで、独自の部分文字列検索ソリューションに O((n*n+1)/2) 書き込み操作は必要ありません。

必要なのは 1 だけです。

つまり、O((n*n+1)/2) オブジェクトを作成する代わりに、ndb.StringProperty(repeated=True) に O((n*n+1)/2) リスト要素を持つ 1 つのオブジェクトを作成します。

于 2013-04-25T19:32:59.993 に答える