0

我試圖添加一個新的列到現有的搜索索引,但它是拋出一個錯誤,錯誤如下所述: - 字段docname存在0次;預期1 java.lang.IllegalArgumentException:字段docname存在0次;預計1有人可以幫我添加一個新的列在谷歌雲搜索索引使用Java

我可以看到新列已添加到搜索索引但無法檢索索引。

通過我的觀察,我可以看到索引中的現有記錄沒有新的列數據,因此它給出了這個錯誤,但是新記錄將具有這個列值。誰能幫我這個。

回答

0

今天自己有這個問題,我在文檔中搜索了一下。這是一個相當令人沮喪的錯誤,因爲它並沒有真正指出問題出在我的代碼中。

看來,當你在一個Document使用getOnlyField("something")(在這種情況下,從一個搜索查詢返回的一處),如果該字段實際上不特定文件中存在但它拋出java.lang.IllegalArgumentException

因爲這往往是當你更新與新列的索引的情況下,我使用的是這樣的事情來解決它:

public static Long getNumberField(ScoredDocument d, String name, Long defaultValue) { 
    try { 
     return d.getOnlyField(name).getNumber().longValue(); 
    } catch (IllegalArgumentException e) { 
     return defaultValue; 
    } 
} 

這就是所謂的搜索結果代碼:

Long numberValue = SearchUtils.getNumberField(scoredDocument, "featuredOrder", -1L) 

這使我能夠捕獲該錯誤並在不存在時返回默認值。

您可以在這裏找到文檔: https://cloud.google.com/appengine/docs/java/javadoc/com/google/appengine/api/search/Document.html#getOnlyField-java.lang.String-