如何在我想要为field_value_factor执行的属性上处理null值?我希望按受欢迎程度加权,但有些记录对该属性具有空值.我是否必须在该数据本身中为该属性设置最小值10?这种方式看起来似乎很笨拙.
{
"query": {
"function_score": {
"query":{
"multi_match" : {
"query" : "new girl",
"fields" : [ "title^1.2", "name"]
}
},
"field_value_factor": {
"field":"popularity",
"modifier":"log1p"
},
"boost_mode":"multiply"
}
}
}
Run Code Online (Sandbox Code Playgroud)
ES的空值默认行为是根本不添加字段值.但是,您可以在映射中设置默认的null_value.所以在你的情况下:
...
"properties" : {
...
"popularity" : {
"type" : "integer",
"null_value" : "0" # or whatever
...
}
...
}
Run Code Online (Sandbox Code Playgroud)
参考:http: //www.elasticsearch.org/guide/en/elasticsearch/reference/current/mapping-core-types.html
"当字段有(JSON)空值时,使用null_value作为字段值.默认为不添加字段."
我很惊讶ES并没有抛出任何错误.您应该确认文件实际上(或不)具有您的"受欢迎程度"字段.尝试使用Sense?
如果你试图在一个不存在的字段上进行计算,我很确定ES会抛出[field [x]]异常值.这既是我自己的经验,也是检查实现field_value_factor的源代码:
向下滚动到:src/main/java/org/elasticsearch/common/lucene/search/function/FieldValueFactorFunction.java
并看看第53-87行.
| 归档时间: |
|
| 查看次数: |
8426 次 |
| 最近记录: |