簡體   English   中英

Datastore Viewer控制台中的GQL基本查詢返回“空名稱空間中沒有結果”。

[英]GQL basic query in Datastore Viewer console returns “No results in Empty namespace.”

我遇到了一個非常基本的問題,即基於簡單的WHERE <column> = 'xxx'類型查詢從Datastore Viewer控制台查詢數據。

這是我的虛擬數據的快照:

在此處輸入圖片說明


據我了解,我應該能夠使用SELECT * FROM User WHERE email = 'a'基於“ email”字段或任何其他字段查詢該記錄。 但這將返回“在空名稱空間中沒有結果”。 如下所示:

在此處輸入圖片說明


在這個相關問題中,我看不出有什么不同:

我已經在實體編輯器中檢查了該記錄,並可以確認email字段的值為“ a”,而沒有任何額外的隱藏空格:

在此處輸入圖片說明


更新

Mihail建議我需要為此查詢創建索引。

按照Java Datastore Index Configuration文檔 ,我在/ war / WEB-INF中創建了datastore-indexes.xml文件:

<?xml version="1.0" encoding="utf-8"?>
<datastore-indexes autoGenerate="false">
    <datastore-index kind="User" ancestor="false">
        <property name="email" direction="asc" />
    </datastore-index>
</datastore-indexes>

我無法部署我的項目,因為它不允許上載該索引。 我收到的錯誤消息是:

對於entity_type創建復合索引失敗:“用戶”祖先:falseProperty {名稱:“電子郵件”方向:1}:此索引:entity_type:“用戶”祖先:falseProperty {名稱:“電子郵件”方向:1}是不必要的,由於內置了單一屬性索引。請從索引文件中將其刪除,然后升級到最新版本的SDK(如果尚未安裝)。

聽起來email屬性未建立索引,並且您無法對未索引的屬性進行任何查詢,即使是像這種簡單的查詢也是如此,因為如果您擁有數百萬個用戶,那么該查詢將必須獲取所有百萬個實體才能找到它們你需要。

您所需要做的就是為email屬性建立索引,但請注意,它將不會處理過去的實體。 您將需要重新保存所有過去的實體,以便應用新索引。

使索引的屬性

  • 在Objectify中,需要將@Index批注添加到屬性中。 更多細節在這里

  • 如果使用低級Java Datastore API,請確保使用setProperty()而不是setUnindexedProperty()定義屬性。 更多細節在這里

  • 如果使用Python的NDB,請確保未將indexed屬性設置為False因為大多數屬性默認情況下都已建立索引。 更多細節在這里

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM