今日この問題が発生したので、私はドキュメントの中で少し調べました。それは問題が私のコードのどこにあったのかを実際に指摘しなかったので、かなりイライラするエラーでした。
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-