需要对候选人的技能和多年经验应用搜索条件
以下是条件
技能可以是强制性的,也可以是非强制性的
如果我们强制应用技能,那么搜索结果应该包括具有技能并相应排序的记录
如果我们应用技能作为非强制性的搜索结果应该根据最匹配的技能排序
除了技能之外,还可以应用经验年数,例如经验大于或小于某些年数,如果应用了经验年数,则搜索结果将包括与技能名称和经验年数条件匹配的记录,并按最匹配的记录排序
下面是有关Map和应用的查询的详细信息,这些Map和查询不起作用
//我的索引Map
{
"skills": {
"type": "nested",
"dynamic": "true",
"properties": {
"id": {
"type": "long"
},
"isHighlight": {
"type": "boolean"
},
"skill": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 32766,
"normalizer": "lowerasciinormalizer"
}
}
},
"yearsOfExp": {
"type": "float"
}
}
}
}
下面是我的索引数据
{
"_index": "tenant1_candidate",
"_type": "docs",
"_id": "953",
"_score": 0.0074906712,
"_source": {
"record": {
"skills": [
{
"id": 0,
"skill": "Jr.Software Developer",
"yearsOfExp": 2,
"isHighlight": false
},
{
"id": 0,
"skill": "AJAX",
"yearsOfExp": 1,
"isHighlight": false
},
{
"id": 0,
"skill": "Angular Developer",
"yearsOfExp": 1,
"isHighlight": false
},
{
"id": 0,
"skill": "AngularJS",
"yearsOfExp": 1,
"isHighlight": false
},
{
"id": 0,
"skill": "Apache Subversion",
"yearsOfExp": 1,
"isHighlight": false
},
{
"id": 0,
"skill": "API",
"yearsOfExp": 1,
"isHighlight": false
},
{
"id": 0,
"skill": "Bachelors Degree",
"yearsOfExp": 1,
"isHighlight": false
},
{
"id": 0,
"skill": "Back End",
"yearsOfExp": 1,
"isHighlight": false
},
{
"id": 0,
"skill": "Bootstrap",
"yearsOfExp": 1,
"isHighlight": false
},
{
"id": 0,
"skill": "Cascading Style Sheets",
"yearsOfExp": 1,
"isHighlight": false
},
{
"id": 0,
"skill": "CRUD",
"yearsOfExp": 1,
"isHighlight": false
},
{
"id": 0,
"skill": "CSS3",
"yearsOfExp": 1,
"isHighlight": false
},
{
"id": 0,
"skill": "Design Patterns",
"yearsOfExp": 1,
"isHighlight": false
},
{
"id": 0,
"skill": "Excellent analytical and logical programming skills",
"yearsOfExp": 1,
"isHighlight": false
},
{
"id": 0,
"skill": "Front End",
"yearsOfExp": 1,
"isHighlight": false
},
{
"id": 0,
"skill": "Git",
"yearsOfExp": 1,
"isHighlight": false
},
{
"id": 0,
"skill": "HTML",
"yearsOfExp": 1,
"isHighlight": false
},
{
"id": 0,
"skill": "HTML5",
"yearsOfExp": 1,
"isHighlight": false
},
{
"id": 0,
"skill": "JavaScript",
"yearsOfExp": 1,
"isHighlight": false
},
{
"id": 0,
"skill": "jQuery",
"yearsOfExp": 1,
"isHighlight": false
},
{
"id": 0,
"skill": "Jr. UI Developer",
"yearsOfExp": 1,
"isHighlight": false
},
{
"id": 0,
"skill": "JSON",
"yearsOfExp": 1,
"isHighlight": false
},
{
"id": 0,
"skill": "Microsoft Access",
"yearsOfExp": 1,
"isHighlight": false
},
{
"id": 0,
"skill": "Microsoft SQL Server",
"yearsOfExp": 1,
"isHighlight": false
},
{
"id": 0,
"skill": "Microsoft Visual Studio",
"yearsOfExp": 1,
"isHighlight": false
},
{
"id": 0,
"skill": "MySQL",
"yearsOfExp": 1,
"isHighlight": false
},
{
"id": 0,
"skill": "Object Oriented Analysis/Design",
"yearsOfExp": 1,
"isHighlight": false
},
{
"id": 0,
"skill": "Responsive Web Design",
"yearsOfExp": 1,
"isHighlight": false
},
{
"id": 0,
"skill": "REST API",
"yearsOfExp": 1,
"isHighlight": false
},
{
"id": 0,
"skill": "RESTful",
"yearsOfExp": 1,
"isHighlight": false
},
{
"id": 0,
"skill": "Test-Driven Development",
"yearsOfExp": 1,
"isHighlight": false
},
{
"id": 0,
"skill": "TypeScript",
"yearsOfExp": 1,
"isHighlight": false
},
{
"id": 0,
"skill": "Version Control",
"yearsOfExp": 1,
"isHighlight": false
},
{
"id": 0,
"skill": "Web Services",
"yearsOfExp": 1,
"isHighlight": false
},
{
"id": 0,
"skill": "XML",
"yearsOfExp": 1,
"isHighlight": false
}
]
},
"entityType": "Candidate",
"index": "tenant1_candidate",
"dbId": "953",
"id": "953"
}
}
下面是我的搜索查询
{
"from": "0",
"size": "30",
"track_scores": true,
"query": {
"bool": {
"must": [
{
"term": {
"entityType": "candidate"
}
},
{
"nested": {
"path": "record.skills",
"score_mode": "avg",
"query": {
"bool": {
"should": [
{
"bool": {
"must": [
{
"match": {
"record.skills.skill.keyword": "XML"
}
},
{
"range": {
"record.skills.yearsOfExp": {
"gte": 0
}
}
}
]
}
},
{
"bool": {
"must": [
{
"match": {
"record.skills.skill.keyword": "SQL"
}
},
{
"range": {
"record.skills.yearsOfExp": {
"gte": 0
}
}
}
]
}
}
]
}
}
}
}
]
}
}
}
示例数据:
候选人1:name:x,技能:[{name:sk1,exp:2},{name:sk2,exp:5},{name:sk3,exp:3}]
候选人2:姓名:y,技能:[{name:sk1,exp:1},{name:sk5,exp:4},{name:sk3,exp:1}]
在搜索中,查询技能可以是强制性的,也可以是非强制性的
如果有2年工作经验的sk1被作为强制性申请,那么只有候选人1才能获得结果
如果有1年工作经验的sk1被强制申请,那么候选1和候选2应该有结果,候选1应该是第一个记录,因为它有更多的工作经验
如果sk1有2年的工作经验,sk5有4年的工作经验是非强制性的,那么候选1和候选2都应该出现在结果中,但是候选2应该是结果中的第一个记录,因为它符合更多的技能
暂无答案!
目前还没有任何答案,快来回答吧!