2013-06-26 27 views
5

Tôi muốn sử dụng một kịch bản để làm như sau:Loại chuyển đổi trong kịch bản elasticsearch

{ 
    "query": { 
    "match_all": {} 
}, 
    "facets": { 
    "user_facet": { 
     "terms": { 
     "field": "user_id", 
     "script": "term + \"_\" + _source.code" 
     } 
    } 
    } 
} 

này cũng tương tự như câu trả lời được đưa ra trong câu hỏi này: elastic search double facet

Vấn đề duy nhất tôi có là trường user_id và mã của tôi là các loại dài, chứ không phải là chuỗi. Có cách nào để biến chúng thành chuỗi để chúng có thể được kết hợp với kịch bản không?

Các lỗi cụ thể tôi nhận được là:

nested: ClassCastException[java.lang.String cannot be cast to java.lang.Number]; 
+0

Tôi không thấy ví dụ của bạn về cách một user_id dài bao giờ có thể khớp với cụm từ mà bạn đang tính toán trong tập lệnh, đó là một sting, ngay cả khi bạn đã chuyển đổi nó. Chắc chắn là tôi đang thiếu gì đó. – Phil

+0

Một ý nghĩ để thử ... Có thể sử dụng 'doc ['user_id']' cho trường này sẽ hoạt động? – Phil

+0

Bạn cũng có thể sử dụng Java trong tập lệnh mvel. Tôi sẽ chỉ chuyển đổi chúng sang Strings bằng cách sử dụng java sau đó;) – javanna

Trả lời

3

Điều này có vẻ vô lý, nhưng tôi có cùng một vấn đề, và cách tôi cố định nó (đối với một vấn đề rất tương tự) là để thả " lĩnh vực "đặc điểm kỹ thuật để nó trông như thế này:

{ 
    "query": { 
    "match_all": {} 
}, 
    "facets": { 
    "user_facet": { 
     "terms": { 
     "script": "term + \"_\" + _source.code" 
     } 
    } 
    } 
} 

Tôi nghĩ rằng nó đang cố gắng chuyển đổi đầu ra của" script "thực hiện trở lại loại trường, gây ra các lớp học ngoại lệ.

Các vấn đề liên quan