Elasticsearch:通过不同字段中数值的接近度得出的结果

时间:2016-12-30 16:44:03

标签: elasticsearch

我将解释我想要实现的目标: 我希望根据几个参数匹配具有相似健康水平的人:俯卧位代表,上拉代表和深蹲。

假设我的系统中有100名运动员,我需要通过健身水平告诉一个与他最接近的用户,基本上是谁做了与用户一样多的引体向上,俯卧撑和深蹲。

以下是我迄今为止从文档中获得的一个示例。

我遇到问题的部分是为引体上升值提供更多“权重”,这意味着引体数中的紧密匹配比深蹲中的匹配更重要。

{
    "query": {
        "function_score": {
          "functions": [
            {
              "gauss": {
                "pullups": {
                  "origin": "25",
                  "scale": "1"
                }
              }
            },
            {
              "gauss": {
                "pushups": {
                  "origin": "56",
                  "scale": "2"
                }
              }
            },
            {
              "gauss": {
                "squats": {
                  "origin": "90",
                  "scale": "2"
                }
              }
            }
          ],
          "score_mode": "multiply"
        }
    }
}

也许使用decayscale可以完成工作,但我觉得weight功能得分正是我需要的?也许我错了?

谢谢!

1 个答案:

答案 0 :(得分:0)

好的,我明白了。我只需要在每个功能评分块中添加weight

{
    "query": {
        "function_score": {
          "functions": [
            {
              "gauss": {
                "pullups": {
                  "origin": "25",
                  "scale": "1"
                }
              },
              "weight": 2
            },
            {
              "gauss": {
                "pushups": {
                  "origin": "56",
                  "scale": "2"
                }
              },
              "weight": 2
            },
            {
              "gauss": {
                "squats": {
                  "origin": "90",
                  "scale": "2"
                }
              },
              "weight": 2
            }
          ],
          "score_mode": "multiply"
        }
    }
}