0

既存の検索インデックスに新しい列を追加しようとしましたが、以下のようなエラーが発生しました: - フィールドdocnameは0回あります;予想される1 java.lang.IllegalArgumentException:フィールドdocnameは0回あります。予期した1誰かがJavaを使用してGoogleクラウド検索インデックスに新しい列を追加できます

新しい列が検索インデックスに追加されたが、インデックスを取得できないことがわかります。

私の知見では、インデックスの既存のレコードには新しい列データがないため、このエラーが発生していますが、新しいレコードにこの列の値があることがわかります。誰もがこれで私を助けることができます。

答えて

0

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

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-

関連する問題