有人可以帮助我使用Java在Google云搜索索引中添加新列

时间:2016-12-15 22:31:27

标签: google-app-engine google-cloud-datastore gae-search gcloud-java

我尝试在现有搜索索引中添加一个新列但是它会抛出一个错误,错误如下所示: -  字段docname存在0次;预期1 java.lang.IllegalArgumentException:字段docname存在0次;预期1

我可以看到新列已添加到搜索索引中,但无法检索索引。

根据我的观察,我可以看到索引中的现有记录没有新的列数据,因此它给出了这个错误,但新记录将具有此列值。任何人都可以帮助我。

1 个答案:

答案 0 :(得分:0)

今天我自己遇到这个问题,我在文档中搜索了一下。这是一个相当令人沮丧的错误,因为它实际上没有确定问题在我的代码中的位置。

当您在getOnlyField("something")上使用Document时(在这种情况下,从搜索查询返回的许多内容之一),如果该字段实际上尚未存在于该特定文档中,则会抛出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)

在搜索结果代码中调用:

Sprite sprite = whatever()

这允许我捕获该错误并在不存在时返回默认值。

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