我尝试在现有搜索索引中添加一个新列但是它会抛出一个错误,错误如下所示: - 字段docname存在0次;预期1 java.lang.IllegalArgumentException:字段docname存在0次;预期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()
这允许我捕获该错误并在不存在时返回默认值。