首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Elasticsearch:文档pt.3中使用自定义分数字段的影响评分-添加衰减

Elasticsearch:文档pt.3中使用自定义分数字段的影响评分-添加衰减
EN

Stack Overflow用户
提问于 2017-08-03 07:16:47
回答 1查看 865关注 0票数 0

Elasticsearch: Influence scoring with custom score field in document pt.2问题的延拓

作为乔安娜的回答,一切正常。我只想在查询中添加衰减函数:

代码语言:javascript
复制
{
  "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字段:

代码语言:javascript
复制
{
  "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
}

我在文档中找到了这个:https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-function-score-query.html#function-decay

我尝试将高斯函数添加到内部的"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也尝试了以下查询:

代码语言:javascript
复制
{
  "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以下查询工作:

代码语言:javascript
复制
{
  "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
            }
          }
        }
      ]
    }
  }
}

这意味着它不会产生错误,但我没有得到预期的结果。我只想提一下最近的文件,而不是旧的文件。有什么帮助吗?如何实现?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-03 08:47:59

这个查询起了作用:

代码语言:javascript
复制
{
  "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值,因此它们在偏移量中下降,因此没有计算衰变。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45477350

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档