Tôi sẽ xem xét số script filter. Bộ lọc sau chỉ trả về các tài liệu có ít nhất 10 phần tử trong trường fieldname
, là một mảng. Hãy nhớ rằng điều này có thể tốn kém tùy thuộc vào số lượng tài liệu bạn có trong chỉ mục của mình.
"filter" : {
"script" : {
"script" : "doc['fieldname'].values.length > 10"
}
}
Về câu hỏi thứ hai: bạn có thực sự có một mảng trống không? Hay nó chỉ là một trường mảng không có giá trị? Bạn có thể sử dụng missing filter để có được tài liệu mà không có giá trị cho một lĩnh vực cụ thể:
"filter" : {
"missing" : { "field" : "user" }
}
Nếu tôi đoán bạn cần phải sử dụng kịch bản một lần nữa, tương tự như những gì tôi đã gợi ý ở trên, chỉ với chiều dài khác nhau như đầu vào. Nếu chiều dài là hằng số tôi muốn đặt nó trong phần params
để kịch bản sẽ được lưu trữ bởi elasticsearch và tái sử dụng, vì nó luôn luôn giống nhau:
"filter" : {
"script" : {
"script" : "doc['fieldname'].values.length > param1"
"params" : {
"param1" : 10
}
}
}
bạn có biết cách thực hiện điều này nếu trường là một chuỗi chứ không phải mảng? Tôi đã thử '" script ":" doc ['title']. value.length()> 10 "' nhưng không may mắn ... –
Tôi có cùng một vấn đề, trường là một mảng, nhưng ES thấy nó là Chuỗi, để nó ném 'groovy.lang.MissingPropertyException: Không có thuộc tính như vậy: độ dài cho lớp: java.lang.String' – lisak
@lisak Hãy thử điều này:" script ":" doc ['fieldname']. size()> 50 " –