2014-09-17 13 views
6

Làm cách nào để xử lý một giá trị null trên thuộc tính mà tôi muốn thực hiện một field_value_factor? Tôi muốn cân nhắc theo mức độ phổ biến nhưng một số bản ghi có giá trị null cho thuộc tính đó. Tôi có phải đặt giá trị tối thiểu là 10 trên thuộc tính đó trong chính dữ liệu đó không? Có vẻ như kludgy theo cách đó.cách xử lý các giá trị null trong trường tìm kiếm đàn hồi field_value_factor

{ 
    "query": { 
     "function_score": { 
     "query":{ 
      "multi_match" : { 
      "query" : "new girl", 
      "fields" : [ "title^1.2", "name"] 
      } 
     }, 
     "field_value_factor": { 
      "field":"popularity", 
      "modifier":"log1p" 
     }, 
     "boost_mode":"multiply" 

     } 
    } 
} 
+0

là elasticsearch ném một lỗi? Chẳng hạn như [Thiếu giá trị cho trường [x]] – yahermann

+0

không nó không ném bất kỳ lỗi nào – MonkeyBonkey

Trả lời

5

Hành vi mặc định của ES cho giá trị null là không thêm giá trị trường. Tuy nhiên, bạn có thể đặt giá trị mặc định null_value, trong ánh xạ của bạn. Vì vậy, trong trường hợp của bạn:

... 
"properties" : { 
    ...  
    "popularity" : { 
     "type" : "integer", 
     "null_value" : "0" # or whatever 
     ... 
     } 
    ... 
} 

tham khảo: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/mapping-core-types.html

"Khi có một (JSON) null giá trị cho trường, sử dụng null_value như giá trị lĩnh vực Defaults để không thêm trường ở tất cả. . "

Tôi ngạc nhiên khi ES không ném bất kỳ lỗi nào. Bạn nên xác nhận các tài liệu thực sự làm (hoặc không) có lĩnh vực 'phổ biến' của bạn. Thử sử dụng Sense?

Nếu bạn cố gắng tính toán trên trường không tồn tại, tôi chắc chắn ES sẽ ném một [Thiếu giá trị cho trường [x]] ngoại lệ. Đây là cả hai từ kinh nghiệm của riêng tôi và từ kiểm tra mã nguồn mà thực hiện field_value_factor:

https://gitlab.devero.com/development/elasticsearchssl/commit/8fbd1bdd489a9d31d3bda249c3ed9715052e196d

Cuộn xuống: src/main/java/org/elasticsearch/common/Lucene/tìm kiếm/chức năng/FieldValueFactorFunction .java

và xem các dòng 53-87.

+0

ES cho tôi ném [Thiếu giá trị cho trường [x]] ngay cả khi tôi không có giá trị rỗng trong trường này. Tôi xác nhận sử dụng { "truy vấn": { "lọc": { "bộ lọc": { "mất tích": { "lĩnh vực": "x" } } } } } này lợi nhuận không có gì. Điều gì có thể là vấn đề? – batmaci

0

Đối với tôi, giải pháp đã được thêm missing tài sản để field_value_factor:

{ "query": { "function_score": { "query": {}, "field_value_factor": { "field": "purchases", "missing": 0 } } } }

(Lưu ý rằng đây là trên ES 2.3)

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