Elastic:嵌套的function_score与我的查询匹配

时间:2016-01-12 17:28:43

标签: elasticsearch nested

我有像Elastic一样索引的文件(这是简历):

{
    id: 1
    title: 'Full Stack Developper',
    updatedAt: '2016-01-01'
    experiences: [
        {
            title: 'Java Software Engineer',
            endedAt: '2016-01-01'
        },
        {
            title: 'PHP Software Engineer',
            endedAt: '2008-01-01'
        },
    ]
}

{
    id : 2
    title: 'Backend Developper',
    updatedAt: '2016-01-01'
    experiences: [
        {
            title: 'Senior PHP Software Engineer',
            endedAt: '2016-01-01'
        },
        {
            title: 'Ruby On Rails advocate',
            endedAt: '2008-01-01'
        },
    ]
}

我想通过例如并包含“PHP”来提高XP在过去5年结束的简历分数。

有可能这样做吗? (我没有看到任何方法,但Elastic有很多功能!)

由于

2 个答案:

答案 0 :(得分:1)

是的,您可以boost符合特定条件的特定简历的分数。您可以将nested queryfunction score合并。这是一个基本的例子

{
  "query": {
    "function_score": {
      "query": {
        "nested": {
          "path": "experiences",
          "score_mode": "sum",
          "query": {
            "bool": {
              "must": [
                {
                  "match": {
                    "experiences.title": "php"
                  }
                },
                {
                  "range": {
                    "endedAt": {
                      "gte": "now-5y"
                    }
                  }
                }
              ]
            }
          }
        }
      },
      "boost": 5
    }
  }
}

这将为您提供所需的结果,我正在使用score_mode:sum,以便具有多个PHP经验的候选人获得更高的分数。

希望这会有所帮助!!

答案 1 :(得分:0)

感谢@ ChintanShah25的回答,这对我很有帮助。这里是一个完整的请求,在任何地方搜索“java”,并且将通过例如在体验标题中增加术语“java”的文档。 我使用function_score,因为在我的实际情况中我有一些功能。

希望它有所帮助(我不是弹性专家,所以如果你看到错误的语法随意添加评论;)

{
   "query": {
      "function_score": {
         "query": {
            "bool": {
               "must": {
                  "term": {
                     "_all": "java"
                  }
               },
               "should": [
                  {
                     "nested": {
                        "path": "experiences",
                        "score_mode": "sum",
                        "query": {
                           "bool": {
                              "should": [
                                 {
                                    "match": {
                                       "experiences.title": "java"
                                    }
                                 },
                                 {
                                    "range": {
                                       "experiences.start": {
                                          "gte": "now-5y"
                                       }
                                    }
                                 }
                              ]
                           }
                        }
                     }
                  }
               ]
            }
         }
      }
   }
}