Elasticsearch: Influence scoring with custom score field in document pt.2问题的延拓
作为乔安娜的回答,一切正常。我只想在查询中添加衰减函数:
{
"query": {
"function_score": {
"query": {
"bool": {
"should": [{
"nested": {
"path": "tags",
"score_mode": "sum",
"query": {
"function_score": {
"query": {
"match": {
"tags.tag": "landscape"
}
},
"field_value_factor": {
"field": "tags.confidence",
"factor": 1,
"missing": 0
}
}
}
}
}]
}
},
"field_value_factor": {
"field": "boost_multiplier",
"factor": 1,
"missing": 0
}
}
}
} 基于文档的created_at字段:
{
"created_at" : "2017-07-31T20:30:14-04:00",
"description" : null,
"height" : 3213,
"id" : "1",
"tags" : [
{
"confidence" : 65.48948436785749,
"tag" : "beach"
},
{
"confidence" : 57.31950504425406,
"tag" : "sea"
},
{
"confidence" : 43.58207236617374,
"tag" : "coast"
},
{
"confidence" : 35.6857910950816,
"tag" : "sand"
},
{
"confidence" : 33.660057321079655,
"tag" : "landscape"
},
{
"confidence" : 32.53252312423727,
"tag" : "sky"
}
],
"width" : 5712,
"color" : "#0C0A07",
"boost_multiplier" : 1
}我尝试将高斯函数添加到内部的"field_value_factor“中,如文档中的示例所示,它给出了错误的说法:”解析function_score查询失败。已经找到的函数field_value_factor,现在遇到gauss.use函数数组,如果您想定义几个函数。“
然后,我将"field_value_factor“和"gauss”放在内部“查询”内的函数数组下,这一次我收到错误的信息:“解析START_OBJECT失败。格式错误的查询,在解析函数时希望得到VALUE_STRING,但得到了function_score”。
简单地说,我找不到在查询中放置"gauss“函数的位置,以便使用基于created_at字段的衰减。
UPDATE I也尝试了以下查询:
{
"query": {
"function_score": {
"query": {
"bool": {
"should": [{
"nested": {
"path": "tags",
"score_mode": "sum",
"query": {
"function_score": {
"query": {
"match": {
"tags.tag": "landscape city"
}
},
"field_value_factor": {
"field": "tags.confidence",
"factor": 5,
"missing": 0
}
}
}
}
}]
}
},
"functions": [
{
"decay": {
"gauss": {
"created_at": {
"origin": "2013-09-17",
"scale": "10d",
"offset": "5d",
"decay": 0.5
}
}
}
},
{
"field_value_factor": {
"field": "boost_multiplier",
"factor": 1,
"missing": 0
}
}
]
}
}
}这一次,它错误地说“没有为衰变注册的查询”。
有什么帮助吗?
UPDATE-2以下查询工作:
{
"query": {
"function_score": {
"query": {
"bool": {
"should": [{
"nested": {
"path": "tags",
"score_mode": "sum",
"query": {
"function_score": {
"query": {
"match": {
"tags.tag": "landscape city"
}
},
"field_value_factor": {
"field": "tags.confidence",
"factor": 5,
"missing": 0
}
}
}
}
}]
}
},
"functions": [
{
"field_value_factor": {
"field": "boost_multiplier",
"factor": 1,
"missing": 0
}
},
{
"gauss": {
"created_at": {
"scale": "365d",
"offset": "5d",
"decay" : 0.5
}
}
}
]
}
}
}这意味着它不会产生错误,但我没有得到预期的结果。我只想提一下最近的文件,而不是旧的文件。有什么帮助吗?如何实现?
发布于 2017-08-03 08:47:59
这个查询起了作用:
{
"query": {
"function_score": {
"query": {
"bool": {
"should": [{
"nested": {
"path": "tags",
"score_mode": "sum",
"query": {
"function_score": {
"query": {
"match": {
"tags.tag": "landscape city"
}
},
"field_value_factor": {
"field": "tags.confidence",
"factor": 5,
"missing": 0
}
}
}
}
}]
}
},
"functions": [
{
"field_value_factor": {
"field": "boost_multiplier",
"factor": 1,
"missing": 0
}
},
{
"gauss": {
"created_at": {
"scale": "365d",
"offset": "5d",
"decay" : 0.5
}
}
}
]
}
}
}问题是文档具有最近的created_at值,因此它们在偏移量中下降,因此没有计算衰变。
https://stackoverflow.com/questions/45477350
复制相似问题