0

私が最初にdeleteデータ ストアのメソッドを作成したとき、めちゃくちゃにして、search.Index. 現在、検索結果は返さdoc_idsれていますが、データストアに関連データがありません。

索引付けされたすべての文書を繰り返し処理し、関連付けられたデータがない文書を削除したいと考えています。

私はこのようなことができると思っています:

docs = videos.Index.search('').results
doc_ids = [x.doc_id for x in docs]
keys = [ndb.Key(urlsafe=x) for x in doc_ids]
entities = [key.get() for key in keys]

nones = []
for idx, i, in enumerate(entities):
  if i == None: nones.append(idx)

for i in nones:
  videos.Index.delete(doc_ids[i])

sync私が行方不明になっている方法や何かがあるかどうか疑問に思っていますか?またvideos.Index.search('')、エンティティで一致するフィールドに対して同じエンティティを複数回返していると思うので、それは間違いなく正しくありません。

4

3 に答える 3

0

Index.search を使用する代わりに、Index.get_range を使用してインデックス付きドキュメントを反復処理できます。詳細はこちら:

https://developers.google.com/appengine/docs/python/search/indexclass#Index_get_range

于 2013-03-28T23:02:55.787 に答える
0

プログラミングの観点から、すべてが同期されていないことがわかっているときにすべてが同期されていることを確認する最も簡単な方法は (同期がずれていることがわかっている場合を除き、これはお勧めしません)、すべてのドキュメントを削除し、再度配置することです。それらを現在データストアにあるものと一緒に。データストアと同様に、ドキュメントに対してリスト プットを実行できるため、この手順がより効率的になります。これは、同期を保証する最善の方法です。

一部のドキュメントを削除するのを忘れた場合は、データストアの更新で一部のドキュメントを更新するのを忘れたことを意味する可能性があるため、これをお勧めします...

于 2013-03-29T14:27:41.240 に答える