2012-06-07 11 views
5

新しいSearch APIの使用を試し始めましたが、デモはスムーズに実行されていますが、検索分野の外部者であることについてまだ混乱しています。App Engineの検索APIの使用方法を明確にしました

まず、ドキュメントを作成する方法です。明らかに、各行をドキュメントにハードコードすることはできませんが、他に何ができますか。私はユーザークラスを持っていると言っています(私はJavaを使っていますが、Pythonはここで違いはないと思います)。ユーザーの情報をドキュメントに追加して、アドレスフィールドに対してフルテキスト検索を実行できるようにします。私のデータストアで

class User { 
    String username; 
    String password; 
    String address; 
} 

、私はそこに10000個のインスタンスでこのエンティティを持っている、と私はこの文書を構築する必要がありますならば、私は

ステップ1に持っていない:データストア

から10000インスタンスを取得

ステップ2:ユーザエンティティの各繰り返し処理、および10000の文書

ステップ3作成:インデックスにすべての10000件のドキュメントを追加し、その後、私が検索できるようになります

上記の3つのステップが間違っていると私を修正してください。

この場合、新しいユーザーが登録されるたびに、新しい文書を作成してインデックスに追加する必要がありますか?

+1

私はそう思っています、はい... – Thilo

+0

ありがとう@Thilo。私の意見では、インデックスはリレーショナルデータベースの手動で管理されたマップのように見えますが、挿入/削除/更新が行われるたびにデータベースと同期させる必要があります。サポート全文検索のメリットはわかりますが、それが唯一のメリットであれば、このすべてのオーバーヘッドを行う価値はありますか? –

+1

オーバーヘッドは常にフルテキスト検索で表示されます。そのインデックスが必要です。より自動化され、より宣言的で、現在のAPIよりもコード集約型で実装することができますか?多分。 FTSが価値があるならば、費用はあなたが決定するまでです。 – Thilo

答えて

6

残念ながら、私はあまりそれで遊んでいません。私はいくつかのことを学びました。

  • 最初に実装する際には、多くのドキュメントを作成することにしました。しかし、期限切れの例外を逃してしまった。だから私はすべての私の古いレコードのドキュメントを構築するためのタスクキューを使用してuppを終了しました。

  • 検索ドキュメントとあなたのデータストアエンティティの間に相互参照を作成することを忘れないでください。したがって、簡単に文書レコードを更新することができます。検索結果からマッチエンティティを取得します。クロスリファレンスデータストアのモデルに新しいプロパティを追加するために

は(私はデータストアのモデル名ですべての私のDOC_IDさんを先頭に)あなたはdoc_idを保存search_document_idのようなものをと呼ばれます。エンティティキーを文字列として含むテキストフィールドをドキュメントに追加します。

しかし、私は一言で言えば、あなたは正しいです。

+5

相互参照のために、ドキュメントのdoc_idをエンティティのキ​​ーに設定してみませんか?この方法では、エンティティに追加のsearch_document_idは必要なく、エンティティキーを格納する文書のテキストプロパティは必要ありません。私はそれを試していないが、私はそのような相互参照の実体/文書を行う必要があり、私はこのようにしない理由を疑問に思った。 – Romz

+6

私は私が提案したことが動作することを確認します。 – Romz

関連する問題