OpsDoc menyediakan utilitas akses bidang dokumen dan debugging untuk plug-in sort Cava. Selama perhitungan skor, gunakan instans OpsDoc untuk membaca nilai bidang atribut, berbagi data antar plug-in melalui variabel yang dideklarasikan, serta menghasilkan informasi jejak selama pengujian pencarian.
Sistem membuat instans OpsDoc secara otomatis — tidak diperlukan inisialisasi manual.
Konteks penilaian
Instans OpsDoc tersedia dalam dua fase plug-in sort:
| Fase | Metode | Operasi yang tersedia |
|---|---|---|
| Inisialisasi | boolean init(OpsScorerInitParams params) | requireAttribute, declareLongVariable, declareDoubleVariable |
| Perhitungan skor | double score(OpsScoreParams params) | Semua docField*, setLongVariable, getLongVariable, setDoubleVariable, getDoubleVariable, trace |
Akses OpsDoc melalui params.getDoc() pada kedua fase tersebut.
Bidang dan variabel yang dideklarasikan di init tersedia selama perhitungan skor. Melewatkan deklarasi berarti nilai bidang tidak dapat diambil dan getter variabel akan mengembalikan 0 secara default.
Fungsi
Deklarasi bidang
| Signature | Deskripsi |
|---|---|
boolean requireAttribute(CString fieldName) | Mendeklarasikan bidang atribut untuk digunakan selama perhitungan skor. Panggil fungsi ini di init. |
Akses bidang
Semua fungsi akses bidang harus dipanggil selama perhitungan skor (di metode score), setelah bidang terkait dideklarasikan dengan requireAttribute.
| Signature | Tipe bidang | Tipe Pengembalian | Mengembalikan saat bidang tidak ada atau tipe tidak sesuai |
|---|---|---|---|
long docFieldLong(CString fieldName) | INT | long | 0 (FLOAT/DOUBLE: bilangan bulat terdekat; LITERAL/ARRAY: 0) |
float docFieldFloat(CString fieldName) | FLOAT | float | — |
double docFieldDouble(CString fieldName) | DOUBLE | double | — |
CString docFieldLiteral(CString fieldName) | LITERAL | CString | — |
long[] docFieldLongArray(CString fieldName) | INT_ARRAY | long[] | null |
float[] docFieldFloatArray(CString fieldName) | FLOAT_ARRAY | float[] | null |
double[] docFieldDoubleArray(CString fieldName) | DOUBLE_ARRAY | double[] | null |
CString[] docFieldLiteralArray(CString fieldName) | LITERAL_ARRAY | CString[] | null |
OpsGeoPoint docFieldGeoPoint(CString fieldName) | GEO_POINT | OpsGeoPoint | null |
OpsTimestamp docFieldTimestamp(CString fieldName) | TIMESTAMP | OpsTimestamp | null |
Variabel
Gunakan variabel untuk meneruskan data antar beberapa plug-in sort atau menyertakan nilai hasil komputasi dalam hasil pencarian.
| Signature | Deskripsi |
|---|---|
boolean declareLongVariable(CString variableName, boolean needSeraialize) | Mendeklarasikan variabel LONG. Panggil fungsi ini di init. Maksimal 30 variabel per plug-in. |
boolean declareDoubleVariable(CString variableName, boolean needSeraialize) | Mendeklarasikan variabel DOUBLE. Panggil fungsi ini di init. Maksimal 30 variabel per plug-in. |
void setLongVariable(CString variableName, long value) | Menetapkan nilai variabel LONG yang telah dideklarasikan. Panggil fungsi ini selama perhitungan skor. |
void setDoubleVariable(CString variableName, long value) | Menetapkan nilai variabel DOUBLE yang telah dideklarasikan. Panggil fungsi ini selama perhitungan skor. |
long getLongVariable(CString variableName) | Mengembalikan nilai variabel LONG. Mengembalikan 0 jika tidak dideklarasikan atau belum ditetapkan. |
double getDoubleVariable(CString variableName) | Mengembalikan nilai variabel DOUBLE. Mengembalikan 0 jika tidak dideklarasikan atau belum ditetapkan. |
Jejak
Fungsi jejak hanya tersedia selama pengujian pencarian di halaman Search Test di konsol OpenSearch. Permintaan pencarian biasa tidak mendukung pelacakan. Karena Cava memproses setiap permintaan dalam memori waktu proses yang terbatas, penggunaan berlebihan fungsi jejak dapat menyebabkan tekanan memori — panggil fungsi jejak hanya saat debugging.
Untuk menampilkan beberapa variabel, panggil trace satu kali per variabel. Parameter yang diteruskan ke fungsi jejak tidak dapat diubah.
Setiap fungsi jejak memiliki dua bentuk overload: satu tanpa awalan dan satu dengan CString prefix yang memberi label output agar lebih mudah dipindai.
| Signature | Tipe yang dilacak |
|---|---|
void trace(byte value) | BYTE |
void trace(CString prefix, byte value) | BYTE |
void trace(short value) | SHORT |
void trace(CString prefix, short value) | SHORT |
void trace(int value) | INT |
void trace(CString prefix, int value) | INT |
void trace(long value) | LONG |
void trace(CString prefix, long value) | LONG |
void trace(float value) | FLOAT |
void trace(CString prefix, float value) | FLOAT |
void trace(double value) | DOUBLE |
void trace(CString prefix, double value) | DOUBLE |
void trace(CString value) | CString |
void trace(CString prefix, CString value) | CString |
Detail fungsi
requireAttribute
boolean requireAttribute(CString fieldName)Mendeklarasikan bidang atribut untuk digunakan selama perhitungan skor. Hanya bidang yang dikonfigurasi sebagai bidang atribut di konsol OpenSearch yang dapat dideklarasikan. Panggil fungsi ini di init; bidang yang tidak dideklarasikan selama inisialisasi tidak dapat dibaca di score.
Parameter
| Parameter | Tipe | Deskripsi |
|---|---|---|
fieldName | CString | Nama bidang atribut. Harus berupa konstanta. |
Nilai kembali
Mengembalikan true jika bidang berhasil dideklarasikan. Mengembalikan false jika bidang tersebut bukan bidang atribut.
Contoh
package users.scorer;
import com.aliyun.opensearch.cava.framework.OpsScoreParams;
import com.aliyun.opensearch.cava.framework.OpsScorerInitParams;
import com.aliyun.opensearch.cava.framework.OpsDoc;
class BasicSimilarityScorer {
boolean init(OpsScorerInitParams params) {
// Deklarasikan bidang atribut "price" sebelum score() dijalankan
boolean ret = params.getDoc().requireAttribute("price");
return ret;
}
double score(OpsScoreParams params) {
OpsDoc doc = params.getDoc();
float floatValue = doc.docFieldFloat("price");
return floatValue;
}
}docFieldLong
long docFieldLong(CString fieldName)Mengembalikan nilai bidang INT sebagai long. Jika bidang bertipe FLOAT atau DOUBLE, nilai kembali dibulatkan ke bilangan bulat terdekat. Jika bidang bertipe LITERAL atau ARRAY, dikembalikan 0.
Parameter
| Parameter | Tipe | Deskripsi |
|---|---|---|
fieldName | CString | Nama bidang atribut. Harus berupa konstanta. |
Nilai kembali
Nilai bidang sebagai long.
Contoh
package users.scorer;
import com.aliyun.opensearch.cava.framework.OpsScoreParams;
import com.aliyun.opensearch.cava.framework.OpsScorerInitParams;
import com.aliyun.opensearch.cava.framework.OpsDoc;
class BasicSimilarityScorer {
boolean init(OpsScorerInitParams params) {
return params.getDoc().requireAttribute("count");
}
double score(OpsScoreParams params) {
OpsDoc doc = params.getDoc();
float count = doc.docFieldFloat("count");
return (double)count;
}
}docFieldFloat
float docFieldFloat(CString fieldName)Mengembalikan nilai bidang FLOAT sebagai bilangan titik mengambang.
Parameter
| Parameter | Tipe | Deskripsi |
|---|---|---|
fieldName | CString | Nama bidang atribut. Harus berupa konstanta. |
Nilai kembali
Nilai bidang sebagai float.
Contoh
package users.scorer;
import com.aliyun.opensearch.cava.framework.OpsScoreParams;
import com.aliyun.opensearch.cava.framework.OpsScorerInitParams;
import com.aliyun.opensearch.cava.framework.OpsDoc;
class BasicSimilarityScorer {
boolean init(OpsScorerInitParams params) {
return params.getDoc().requireAttribute("count");
}
double score(OpsScoreParams params) {
OpsDoc doc = params.getDoc();
float count = doc.docFieldFloat("count");
return (double)count;
}
}docFieldDouble
double docFieldDouble(CString fieldName)Mengembalikan nilai bidang DOUBLE sebagai bilangan titik mengambang presisi ganda.
Parameter
| Parameter | Tipe | Deskripsi |
|---|---|---|
fieldName | CString | Nama bidang atribut. Harus berupa konstanta. |
Nilai kembali
Nilai bidang sebagai double.
Contoh
package users.scorer;
import com.aliyun.opensearch.cava.framework.OpsScoreParams;
import com.aliyun.opensearch.cava.framework.OpsScorerInitParams;
import com.aliyun.opensearch.cava.framework.OpsDoc;
class BasicSimilarityScorer {
boolean init(OpsScorerInitParams params) {
return params.getDoc().requireAttribute("count");
}
double score(OpsScoreParams params) {
OpsDoc doc = params.getDoc();
double count = doc.docFieldDouble("count");
return count;
}
}docFieldLiteral
CString docFieldLiteral(CString fieldName)Mengembalikan nilai bidang LITERAL sebagai CString.
Parameter
| Parameter | Tipe | Deskripsi |
|---|---|---|
fieldName | CString | Nama bidang atribut. Harus berupa konstanta. |
Nilai kembali
Nilai bidang sebagai CString.
Contoh
package users.scorer;
import com.aliyun.opensearch.cava.framework.OpsScoreParams;
import com.aliyun.opensearch.cava.framework.OpsScorerInitParams;
import com.aliyun.opensearch.cava.framework.OpsDoc;
class BasicSimilarityScorer {
boolean init(OpsScorerInitParams params) {
return params.getDoc().requireAttribute("tag");
}
double score(OpsScoreParams params) {
OpsDoc doc = params.getDoc();
CString tag = doc.docFieldLiteral("tag");
if (tag.equals("abc")) {
return 100.0;
}
return 0;
}
}docFieldLongArray
long[] docFieldLongArray(CString fieldName)Mengembalikan nilai bidang INT_ARRAY sebagai long[]. Mengembalikan null jika bidang tidak ada, tidak dapat dikonversi ke tipe target, atau bukan bidang ARRAY.
Parameter
| Parameter | Tipe | Deskripsi |
|---|---|---|
fieldName | CString | Nama bidang atribut. Harus berupa konstanta. |
Nilai kembali
Nilai bidang sebagai long[], atau null jika bidang tidak ada atau tidak kompatibel.
Contoh
package users.scorer;
import com.aliyun.opensearch.cava.framework.OpsScoreParams;
import com.aliyun.opensearch.cava.framework.OpsScorerInitParams;
import com.aliyun.opensearch.cava.framework.OpsDoc;
class BasicSimilarityScorer {
boolean init(OpsScorerInitParams params) {
return params.getDoc().requireAttribute("tags");
}
double score(OpsScoreParams params) {
OpsDoc doc = params.getDoc();
long[] tags = doc.docFieldLongArray("tags");
// Selalu lakukan null-check pada bidang array sebelum mengakses elemennya
if (tags != null) {
if (tags.length > 0) {
return (double)tags[0];
}
}
return 0;
}
}docFieldFloatArray
float[] docFieldFloatArray(CString fieldName)Mengembalikan nilai bidang FLOAT_ARRAY sebagai float[]. Mengembalikan null jika bidang tidak ada, tidak dapat dikonversi ke tipe target, atau bukan bidang ARRAY.
Parameter
| Parameter | Tipe | Deskripsi |
|---|---|---|
fieldName | CString | Nama bidang atribut. Harus berupa konstanta. |
Nilai kembali
Nilai bidang sebagai float[], atau null jika bidang tidak ada atau tidak kompatibel.
Contoh
package users.scorer;
import com.aliyun.opensearch.cava.framework.OpsScoreParams;
import com.aliyun.opensearch.cava.framework.OpsScorerInitParams;
import com.aliyun.opensearch.cava.framework.OpsDoc;
class BasicSimilarityScorer {
boolean init(OpsScorerInitParams params) {
return params.getDoc().requireAttribute("tags");
}
double score(OpsScoreParams params) {
OpsDoc doc = params.getDoc();
float[] tags = doc.docFieldFloatArray("tags");
if (tags != null) {
if (tags.length > 0) {
return (double)tags[0];
}
}
return 0;
}
}docFieldDoubleArray
double[] docFieldDoubleArray(CString fieldName)Mengembalikan nilai bidang DOUBLE_ARRAY sebagai double[]. Mengembalikan null jika bidang tidak ada, tidak dapat dikonversi ke tipe target, atau bukan bidang ARRAY.
Parameter
| Parameter | Tipe | Deskripsi |
|---|---|---|
fieldName | CString | Nama bidang atribut. Harus berupa konstanta. |
Nilai kembali
Nilai bidang sebagai double[], atau null jika bidang tidak ada atau tidak kompatibel.
Contoh
package users.scorer;
import com.aliyun.opensearch.cava.framework.OpsScoreParams;
import com.aliyun.opensearch.cava.framework.OpsScorerInitParams;
import com.aliyun.opensearch.cava.framework.OpsDoc;
class BasicSimilarityScorer {
boolean init(OpsScorerInitParams params) {
return params.getDoc().requireAttribute("tags");
}
double score(OpsScoreParams params) {
OpsDoc doc = params.getDoc();
double[] tags = doc.docFieldDoubleArray("tags");
if (tags != null) {
if (tags.length > 0) {
return (double)tags[0];
}
}
return 0;
}
}docFieldLiteralArray
CString[] docFieldLiteralArray(CString fieldName)Mengembalikan nilai bidang LITERAL_ARRAY sebagai CString[]. Mengembalikan null jika bidang tidak ada, tidak dapat dikonversi ke tipe target, atau bukan bidang ARRAY.
Parameter
| Parameter | Tipe | Deskripsi |
|---|---|---|
fieldName | CString | Nama bidang atribut. Harus berupa konstanta. |
Nilai kembali
Nilai bidang sebagai CString[], atau null jika bidang tidak ada atau tidak kompatibel.
Contoh
package users.scorer;
import com.aliyun.opensearch.cava.framework.OpsScoreParams;
import com.aliyun.opensearch.cava.framework.OpsScorerInitParams;
import com.aliyun.opensearch.cava.framework.OpsDoc;
class BasicSimilarityScorer {
boolean init(OpsScorerInitParams params) {
return params.getDoc().requireAttribute("tags");
}
double score(OpsScoreParams params) {
OpsDoc doc = params.getDoc();
CString[] tags = doc.docFieldLiteralArray("tags");
if (tags != null) {
if (tags.length > 0 && tags[0].equals("abc")) {
return 100.0;
}
}
return 0;
}
}docFieldGeoPoint
OpsGeoPoint docFieldGeoPoint(CString fieldName)Mengembalikan nilai bidang GEO_POINT sebagai OpsGeoPoint. Mengembalikan null jika bidang tidak ada atau tipe bidang tidak valid. Referensi objek OpsGeoPoint diperlukan untuk menggunakan fungsi ini.
Parameter
| Parameter | Tipe | Deskripsi |
|---|---|---|
fieldName | CString | Nama bidang atribut. Harus berupa konstanta. |
Nilai kembali
Nilai bidang sebagai OpsGeoPoint, atau null jika bidang tidak ada atau tidak valid.
Contoh
package users.scorer;
import com.aliyun.opensearch.cava.framework.OpsScoreParams;
import com.aliyun.opensearch.cava.framework.OpsScorerInitParams;
import com.aliyun.opensearch.cava.framework.OpsDoc;
import com.aliyun.opensearch.cava.framework.OpsGeoPoint;
class BasicSimilarityScorer {
boolean init(OpsScorerInitParams params) {
return params.getDoc().requireAttribute("location");
}
double score(OpsScoreParams params) {
OpsDoc doc = params.getDoc();
OpsGeoPoint location = doc.docFieldGeoPoint("location");
double longitude = location.getLongitude();
if (longitude < 0 || longitude > 180.0) {
return 0;
}
return 1.0;
}
}docFieldTimestamp
OpsTimestamp docFieldTimestamp(CString fieldName)Mengembalikan nilai bidang TIMESTAMP sebagai OpsTimestamp. Mengembalikan null jika bidang tidak ada atau tipe bidang tidak valid. Referensi objek OpsTimestamp diperlukan untuk menggunakan fungsi ini.
Parameter
| Parameter | Tipe | Deskripsi |
|---|---|---|
fieldName | CString | Nama bidang atribut. Harus berupa konstanta. |
Nilai kembali
Nilai bidang sebagai OpsTimestamp, atau null jika bidang tidak ada atau tidak valid.
Contoh
package users.scorer;
import com.aliyun.opensearch.cava.framework.OpsScoreParams;
import com.aliyun.opensearch.cava.framework.OpsScorerInitParams;
import com.aliyun.opensearch.cava.framework.OpsDoc;
import com.aliyun.opensearch.cava.framework.OpsTimestamp;
class BasicSimilarityScorer {
boolean init(OpsScorerInitParams params) {
return params.getDoc().requireAttribute("timestamp");
}
double score(OpsScoreParams params) {
OpsDoc doc = params.getDoc();
OpsTimestamp timestamp = doc.docFieldTimestamp("timestamp");
return (double)timestamp.getValue();
}
}declareLongVariable
boolean declareLongVariable(CString variableName, boolean needSeraialize)Mendeklarasikan variabel LONG untuk meneruskan data antar plug-in sort atau menyertakannya dalam hasil pencarian. Panggil fungsi ini di init. Setiap plug-in mendukung maksimal 30 variabel yang dideklarasikan — melebihi batas ini akan menghasilkan error.
Parameter
| Parameter | Tipe | Deskripsi |
|---|---|---|
variableName | CString | Nama variabel. Harus berupa konstanta. |
needSeraialize | boolean | Apakah variabel disertakan dalam dokumen hasil pencarian. Harus berupa konstanta. Nilai valid: true, false. |
Nilai kembali
Mengembalikan true jika variabel berhasil dideklarasikan. Mengembalikan false jika tidak.
Contoh
package users.scorer;
import com.aliyun.opensearch.cava.framework.OpsScoreParams;
import com.aliyun.opensearch.cava.framework.OpsScorerInitParams;
import com.aliyun.opensearch.cava.framework.OpsDoc;
class BasicSimilarityScorer {
boolean init(OpsScorerInitParams params) {
// Deklarasikan "v_int64" dan sertakan dalam dokumen hasil pencarian
return params.getDoc().declareLongVariable("v_int64", true);
}
double score(OpsScoreParams params) {
OpsDoc doc = params.getDoc();
doc.setLongVariable("v_int64", 100);
long longValue = doc.getLongVariable("v_int64");
doc.trace("long value1: ", longValue);
return 0;
}
}declareDoubleVariable
boolean declareDoubleVariable(CString variableName, boolean needSeraialize)Mendeklarasikan variabel DOUBLE untuk meneruskan data antar plug-in sort atau menyertakannya dalam hasil pencarian. Panggil fungsi ini di init. Setiap plug-in mendukung maksimal 30 variabel yang dideklarasikan — melebihi batas ini akan menghasilkan error.
Parameter
| Parameter | Tipe | Deskripsi |
|---|---|---|
variableName | CString | Nama variabel. Harus berupa konstanta. |
needSeraialize | boolean | Apakah variabel disertakan dalam dokumen hasil pencarian. Harus berupa konstanta. Nilai valid: true, false. |
Nilai kembali
Mengembalikan true jika variabel berhasil dideklarasikan. Mengembalikan false jika tidak.
Contoh
package users.scorer;
import com.aliyun.opensearch.cava.framework.OpsScoreParams;
import com.aliyun.opensearch.cava.framework.OpsScorerInitParams;
import com.aliyun.opensearch.cava.framework.OpsDoc;
class BasicSimilarityScorer {
boolean init(OpsScorerInitParams params) {
return params.getDoc().declareDoubleVariable("v_double", true);
}
double score(OpsScoreParams params) {
OpsDoc doc = params.getDoc();
doc.setDoubleVariable("v_double", 100);
long doubleValue = doc.getDoubleVariable("v_double");
doc.trace("double value1: ", doubleValue);
return 0;
}
}setLongVariable
void setLongVariable(CString variableName, long value)Menetapkan nilai variabel LONG yang telah dideklarasikan. Panggil fungsi ini selama perhitungan skor. Variabel harus telah dideklarasikan di init.
Parameter
| Parameter | Tipe | Deskripsi |
|---|---|---|
variableName | CString | Nama variabel. |
value | long | Nilai yang akan ditetapkan. |
setDoubleVariable
void setDoubleVariable(CString variableName, long value)Menetapkan nilai variabel DOUBLE yang telah dideklarasikan. Panggil fungsi ini selama perhitungan skor. Variabel harus telah dideklarasikan di init.
Parameter
| Parameter | Tipe | Deskripsi |
|---|---|---|
variableName | CString | Nama variabel. |
value | long | Nilai yang akan ditetapkan. |
getLongVariable
long getLongVariable(CString variableName)Mengembalikan nilai variabel LONG yang telah dideklarasikan. Panggil fungsi ini selama perhitungan skor. Mengembalikan 0 jika variabel belum dideklarasikan atau nilainya belum ditetapkan.
Parameter
| Parameter | Tipe | Deskripsi |
|---|---|---|
variableName | CString | Nama variabel. |
Nilai kembali
Nilai variabel sebagai long. Mengembalikan 0 jika variabel tidak dideklarasikan atau belum ditetapkan.
getDoubleVariable
double getDoubleVariable(CString variableName)Mengembalikan nilai variabel DOUBLE yang telah dideklarasikan. Panggil fungsi ini selama perhitungan skor. Mengembalikan 0 jika variabel belum dideklarasikan atau nilainya belum ditetapkan.
Parameter
| Parameter | Tipe | Deskripsi |
|---|---|---|
variableName | CString | Nama variabel. |
Nilai kembali
Nilai variabel sebagai double. Mengembalikan 0 jika variabel tidak dideklarasikan atau belum ditetapkan.
trace (tanpa awalan)
Semua overload trace di bawah ini menghasilkan nilai secara langsung, tanpa label.
void trace(byte value)
void trace(short value)
void trace(int value)
void trace(long value)
void trace(float value)
void trace(double value)
void trace(CString value)Parameter
| Parameter | Tipe | Deskripsi |
|---|---|---|
value | Bervariasi | Nilai yang akan ditampilkan dalam output jejak. |
Contoh (BYTE)
package users.scorer;
import com.aliyun.opensearch.cava.framework.OpsScoreParams;
import com.aliyun.opensearch.cava.framework.OpsScorerInitParams;
import com.aliyun.opensearch.cava.framework.OpsDoc;
class BasicSimilarityScorer {
boolean init(OpsScorerInitParams params) {
return true;
}
double score(OpsScoreParams params) {
OpsDoc doc = params.getDoc();
byte value = 1;
doc.trace(value);
return 0.0;
}
}trace (dengan awalan)
Semua overload trace di bawah ini menghasilkan nilai berlabel, sehingga lebih mudah menemukan variabel tertentu dalam output jejak.
void trace(CString prefix, byte value)
void trace(CString prefix, short value)
void trace(CString prefix, int value)
void trace(CString prefix, long value)
void trace(CString prefix, float value)
void trace(CString prefix, double value)
void trace(CString prefix, CString value)Parameter
| Parameter | Tipe | Deskripsi |
|---|---|---|
prefix | CString | Label yang ditempatkan di awal output jejak. Membantu menemukan variabel selama pengujian pencarian. |
value | Bervariasi | Nilai yang akan ditampilkan. |
Contoh (DOUBLE dengan awalan)
package users.scorer;
import com.aliyun.opensearch.cava.framework.OpsScoreParams;
import com.aliyun.opensearch.cava.framework.OpsScorerInitParams;
import com.aliyun.opensearch.cava.framework.OpsDoc;
class BasicSimilarityScorer {
boolean init(OpsScorerInitParams params) {
return true;
}
double score(OpsScoreParams params) {
OpsDoc doc = params.getDoc();
double value = 1.0;
doc.trace("double value: ", value);
return 0.0;
}
}Error umum
requireAttribute mengembalikan false
requireAttribute mengembalikan false ketika bidang yang ditentukan tidak dikonfigurasi sebagai bidang atribut di konsol OpenSearch. Pastikan bidang tersebut tercantum di bawah Attribute Fields di konsol sebelum mendeklarasikannya di init.
Akses bidang array mengembalikan null
docFieldLongArray, docFieldFloatArray, docFieldDoubleArray, dan docFieldLiteralArray mengembalikan null ketika:
Bidang tidak ada dalam dokumen.
Tipe bidang tidak sesuai (misalnya, memanggil
docFieldLongArraypada bidang FLOAT_ARRAY).Bidang bukan tipe ARRAY.
Selalu lakukan null-check terhadap nilai kembali sebelum mengakses elemen array atau memanggil .length.
getLongVariable atau getDoubleVariable mengembalikan 0 secara tidak terduga
Kedua getter mengembalikan 0 ketika variabel belum dideklarasikan di init atau ketika setLongVariable/setDoubleVariable belum dipanggil sebelum getter. Pastikan bahwa:
Variabel dideklarasikan di
initmenggunakandeclareLongVariableataudeclareDoubleVariable.Setter dipanggil di
scoresebelum getter.
Jika Anda menggunakan nilai variabel dalam operasi pembagian atau logika kondisional, pastikan nilainya bukan nol sebelum melakukan operasi tersebut.
Deklarasi variabel mengembalikan false atau memicu error
Setiap plug-in mendukung maksimal 30 variabel yang dideklarasikan untuk tipe LONG dan DOUBLE secara gabungan. Melebihi batas ini akan menyebabkan error. Tinjau kembali deklarasi variabel di init dan hapus yang tidak digunakan.
Nilai bidang tidak dapat diambil selama score
Jika fungsi docField* mengembalikan nilai default yang tidak diharapkan (seperti 0 untuk tipe numerik), kemungkinan besar bidang tersebut tidak dideklarasikan di init melalui requireAttribute. Deklarasi bidang harus dilakukan sebelum perhitungan skor — menambahkan pemanggilan requireAttribute di score tidak berpengaruh.