我尝试向现有搜索索引添加一个新列,但它引发错误,错误如下所述:- 字段 docname 出现 0 次;预期 1 java.lang.IllegalArgumentException:字段 docname 出现 0 次;预计 1
我可以看到新列已添加到搜索索引但无法检索索引。
根据我的观察,我可以看到索引中的现有记录没有新的列数据,因此它给出了这个错误,但新记录将具有这个列值。谁能帮我这个。
我尝试向现有搜索索引添加一个新列,但它引发错误,错误如下所述:- 字段 docname 出现 0 次;预期 1 java.lang.IllegalArgumentException:字段 docname 出现 0 次;预计 1
我可以看到新列已添加到搜索索引但无法检索索引。
根据我的观察,我可以看到索引中的现有记录没有新的列数据,因此它给出了这个错误,但新记录将具有这个列值。谁能帮我这个。
今天自己遇到这个问题后,我在文档中进行了一些搜索。这是一个相当令人沮丧的错误,因为它实际上并没有指出我的代码中的问题所在。
看来,当您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)
这使我可以捕获该错误并在它不存在时返回默认值。