0

我尝试向现有搜索索引添加一个新列,但它引发错误,错误如下所述:- 字段 docname 出现 0 次;预期 1 java.lang.IllegalArgumentException:字段 docname 出现 0 次;预计 1

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

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

4

1 回答 1

0

今天自己遇到这个问题后,我在文档中进行了一些搜索。这是一个相当令人沮丧的错误,因为它实际上并没有指出我的代码中的问题所在。

看来,当您getOnlyField("something")在 a 上使用时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)

这使我可以捕获该错误并在它不存在时返回默认值。

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

于 2017-01-25T18:29:57.183 回答