0

ドキュメントをCloudデータストアと検索インデックスの両方に格納する場合、Searchインデックスドキュメントを返すのではなく、Searchインデックスからクエリを実行して、対応する各エンティティをCloudデータストア代わりに?言い換えれば、私は基本的に私の検索クエリが、データストアクエリが返すものを返すようにしたい。GAAT Search APIとDatatstoreの統合

その他の背景:データストアにエンティティを作成すると、エンティティID、名前、および説明パラメータが渡されます。検索ドキュメントは、そのドキュメントIDが対応するエンティティIDと同じになるように作成されます。目標は、フルテキスト検索APIを使用してテキストクエリに基づいてすべての関連ドキュメントを取得するフロントエンド検索実装を作成することです。しかし、データストアのエンティティに格納されているそのドキュメントのすべての詳細を返す必要があります。

クエリから返された各検索doc_idのキーを作成し、get_multi(keys)を使用して関連するすべてのデータストアエンティティを取得する方法がありますか?

+0

純粋な検索ドキュメントに変換する代わりに、複数のインデックスを作成してデータストアクエリにのみ依存し、フルテキスト検索タイプの機能を再作成することもできます。誰かがこのオプションよりも洞察力のある考えを持っていることを願っています。 – yoonjesung

+0

あなたはあなたの質問でより具体的にする必要があります、それはあなたが答えたいものは不明です。 – danielx

答えて

1

これに対応するファーストクラスのサポートはありません。文書IDをデータストアキーと一致させ、すべてのput/get/search要求を1つのDAO /リポジトリ層にルーティングして一定のレベルの整合性を確保することをお勧めします。

並列非同期書き込みを使用して遅延を抑えることはできますが、トランザクションに参加していない検索についてはあまりできません。また、定義された一貫性もないため、最終的なものであり、おそらくデータストアのインデックスの伝播よりもはるかに遅いと想定します。

+0

強固な一貫性のあるデータを作成したい場合は、トランザクション用にデータストアのみを使用する必要がありますか?もしそうなら、私はデータストアクエリに対するテキストベース検索の独自の実装を作成する必要がありますか? – yoonjesung

+0

強固に一貫性のあるクエリが必要な場合は、データストア内で祖先クエリを使用する必要があります。あなたは自分で用語を分解し断片化することができ、データストアに格納することができます。これは検索サービスとほぼ同じです。 – Nick

0

必要な情報をテキストコンテンツに加えて、検索APIドキュメントに保存することができます。

これにより、検索APIドキュメントとデータストアエンティティの両方にいくつかの重複した情報を保存することを犠牲にして、1回のコールですべてのデータを取得できます。明らかに、重複したデータを持つことは理想的ではありませんが、大幅なパフォーマンス向上をもたらすことができるため、データ(例:文書のタイムスタンプ、作者ID、タイトルなど)をほとんど変更しない場合に適しています。

+0

データストアキーのようなオブジェクトをどのように格納するかについて少し詳しく説明できますか? Search APIは、このデータ型をサポートしていないようです。データストア内の値の一部は他のエンティティを参照するndb KeyPropertiesであるため、これらのタイプのデータをSearch APIに転送することは実行可能な選択肢のようには見えないため、私は尋ねます。 – yoonjesung

+0

キーの代わりにエンティティIDを格納することをお勧めしますが、キーを保存する必要がある場合は、データストアのキーを文字列に変換して戻すことができます。 –

+0

これは、一部のデータでのみ機能します。検索サービスでは時間ではなく日付のみがサポートされ、長さなどの数値が格納されないような精度や位取りの制限があります。 Search APIは、特定のケースを除いて、実際にはデータストアとしては適していません。あなたにとってはOKかもしれないし、そうでないかもしれません。 – Nick