在我的制图文档中,我有一个嵌套的对象字段,如下所示
"availabilities":{
"type": "nested",
"dynamic": "strict",
"properties": {
"start": { "type": "date", "format": "yyyy-MM-dd" },
"end": { "type": "date", "format": "yyyy-MM-dd" },
"age": { "type": "integer" }
}
}我有一个很长的DSL查询,其中一个过滤器是:
{
"nested": {
"path": "availabilities",
"inner_hits" : {
"size": 1,
"name": "selected_availabilities"
},
"query": {
"bool": {
"must": [
{
"range": {
"availabilities.start": {
"gte": "2016-10-08",
"lte": "2016-10-08"
}
}
},
{
"range": {
"availabilities.end": {
"gte": "2016-10-17",
"lte": "2016-10-17"
}
}
}
]
}
}
}
}我正在尝试使用inner_hits来获取所选的availabilities对象,结果返回如下所示:
{
"took": 5,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 1,
"max_score": 6000,
"hits": [
{
"_index": "listings_v1",
"_type": "listing",
"_id": "228527",
"_score": 6000,
"_source": {
...my fields....
...my fields....
...my fields....
...my fields....
...availabilities has nested objects.....
},
"inner_hits": {
"selected_availabilities": {
"hits": {
"total": 1,
"max_score": 1.4142135,
"hits": [
{
"_type": "listing",
"_id": "228527",
"_nested": {
"field": "availabilities",
"offset": 3
},
"_score": 1.4142135,
"_source": {
"start": "2016-10-08",
"end": "2016-10-17",
"age": 23
}
}
]
}
}
}
}
]
}
}我的目标是使用inner_hits中所选对象中的一个文件来计算分数。因为availabilities对象可能有多个对象,但始终只有一个匹配我搜索条件。所以这就是我的查询:
function_score": {
"query": {},
"score_mode": "sum",
"boost_mode": "replace"
"functions": [
{
"script_score": {
"params": {
"move_in_date_boost": -1350,
"desired_move_in_date": "2016-11-03"
},
"script": "return (inner_hits['selected_availabilities']['hits']['hits'][0]['_source']['age']);"
}
},
{
....more functions...
}
]
}但是当我使用上面的脚本时,我得到了以下错误:
{
"took": 239,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 4,
"failed": 1,
"failures": [
{
"shard": 0,
"index": "xyz_v1",
"node": "hgu7no8oo9wwe34wetw",
"reason": {
"type": "script_exception",
"reason": "failed to run inline script [return (inner_hits['selected_availabilities']['hits']['hits'][0]['_source']['age']);] using lang [groovy]",
"caused_by": {
"type": "missing_property_exception",
"reason": "missing_property_exception: No such property: inner_hits for class: 572da4fc5f5e591a0d7cfec2cde0c998b550b1f4"
}
}
}
]
},
"hits": {
"total": 0,
"max_score": null,
"hits": []
}
}如何在分数计算中获取selected_availabilities age字段?任何帮助都将受到高度的感谢。
发布于 2016-10-25 10:30:28
试着使用
return (doc['inner_hits']...而不是
return (inner_hits...https://stackoverflow.com/questions/40229750
复制相似问题