Elasticsearch - 以更高的值

时间:2015-09-28 15:15:26

标签: elasticsearch nested solr-boost

我有一个查询(很好的一部分 - 休息不像分页那样重要):

  "query": {
    "filtered": {
      "query": {
        "bool": {
          "must": [
            {
              "term": {
                "is_active": true
              }
            }
          ],
          "should": [
            {
              "bool": {
                "must": [
                  {
                    "nested": {
                      "path": "skills",
                      "query": {
                        "bool": {
                          "must": [
                            {
                              "bool": {
                                "must": [
                                  {
                                    "range": {
                                      "skills.value": {
                                        "gte": "2"
                                      }
                                    }
                                  },
                                  {
                                    "term": {
                                      "skills.skill.name": "php"
                                    }
                                  }
                                ]
                              }
                            }
                          ]
                        }
                      }
                    }
                  }
                ],
                "boost": 2
              }
            }
          ]
        }
      }
    }
  }

用于搜索个人资料,其具有技能" PHP"值2或更多。用户可以搜索多个技能=>值对。 它工作正常,但我有一个问题:

如何对具有更高技能的匹配技能进行一点推动。值得,只是为了让PHP值为3的人在搜索结果中比使用PHP 2的人更高,即使两者都匹配正确。

1 个答案:

答案 0 :(得分:2)

我建议使用function_score来执行此操作,更具体地说,field_value_factor function允许在评分计算中使用字段值(使用可选因子乘以字段值):

{
  "query": {
    "filtered": {
      "query": {
        "bool": {
          "must": [
            {
              "term": {
                "is_active": true
              }
            }
          ],
          "should": [
            {
              "nested": {
                "path": "skills",
                "query": {
                  "function_score": {
                    "query": {
                      "bool": {
                        "must": [
                          {
                            "range": {
                              "skills.value": {
                                "gte": "2"
                              }
                            }
                          },
                          {
                            "term": {
                              "skills.skill.name": "php"
                            }
                          }
                        ]
                      }
                    },
                    "functions": [
                      {
                        "field_value_factor": {
                          "field": "skills.value",
                          "factor": 2
                        }
                      }
                    ]
                  }
                }
              }
            }
          ]
        }
      }
    }
  }
}