Tôi đang cố gắng sử dụng các trường tập lệnh trong truy vấn của mình. Tôi đã bật kịch bản hộp cát và cố gắng sử dụng biểu thức để tính toán trường mới.Trường tập lệnh sử dụng biểu thức - Chỉ biến thành viên [giá trị] hoặc phương pháp thành viên có thể được truy cập
Vấn đề là tôi nhận được lỗi sau:
{
"type": "expression_script_compilation_exception",
"reason": "Only the member variable [value] or member methods may be accessed on a field when not accessing the field directly"
}
Dường như chỉ "giá trị" có thể truy cập. tôi đang thiếu gì ở đây?
Khi chạy truy vấn sau đây:
{
"query": {
"match_all": {}
},
"script_fields" : {
"field1" : {
"script" : {
"lang": "expression",
"inline": "doc['about.hobbies'].empty"
}
}
}
}
Mapping:
{
"my_index": {
"mappings": {
"type": {
"properties": {
"about": {
"properties": {
"hobbies": {
"type": "string",
"analyzer": "lowercase"
}
}
}
}
}
}
}
bé giải thích: Tôi có một lĩnh vực mà có thể chứa danh sách các giá trị chuỗi.
"hobbies": ["a","b",c"]
và nó cũng có thể trống. Tôi muốn có một trường kịch bản kiểu boolean sẽ có giá trị đúng khi danh sách không rỗng, và sai khi danh sách rỗng.
Cập nhật: Đọc một số chi tiết, tôi gặp phải tài liệu này trên lucene expressions scripts
There are a few limitations relative to other script languages:
- Only numeric fields may be accessed
- Stored fields are not available
- If a field is sparse (only some documents contain a value), documents missing the field will have a value of 0
lĩnh vực của tôi là kiểu String, nó có thể là vấn đề? Nếu có, có cách nào khác để sử dụng các trường tập lệnh dựa trên các trường chuỗi không? có thể sử dụng groovy?
hãy chia sẻ các bản đồ .. – Richa
Cảm ơn @Richa. Đã cập nhật. – Tomer