问题描述
需要将搜索条件应用于候选人的技能和工作经验
以下是条件
- 技能可以是强制性的,也可以是非强制性的
- 如果我们将技能作为必修课程,则搜索结果应包括具有技能和排序的记录
- 如果我们应用技能,因为非强制性搜索结果应基于最匹配的技能进行排序
- 具有一定技能的年限也可以应用,例如经验大于或小于几年;如果应用年限,则搜索结果中包含与技能名称和经验年限相匹配的记录,并按最匹配的记录进行排序
下面是有关无法应用的映射和查询的详细信息
// myindexmapping
{
"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,"skill": "Angular Developer","skill": "AngularJS","skill": "Apache Subversion","skill": "API","skill": "Bachelors Degree","skill": "Back End","skill": "Bootstrap","skill": "Cascading Style Sheets","skill": "CRUD","skill": "CSS3","skill": "Design Patterns","skill": "Excellent analytical and logical programming skills","skill": "Front End","skill": "Git","skill": "HTML","skill": "HTML5","skill": "JavaScript","skill": "jQuery","skill": "Jr. UI Developer","skill": "JSON","skill": "Microsoft Access","skill": "Microsoft sql Server","skill": "Microsoft Visual Studio","skill": "MysqL","skill": "Object Oriented Analysis/Design","skill": "Responsive Web Design","skill": "REST API","skill": "RESTful","skill": "Test-Driven Development","skill": "TypeScript","skill": "Version Control","skill": "Web Services","skill": "XML","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: 名称:x 技能:[{名称:sk1,exp:2},{名称:sk2,exp:5},{名称:sk3,exp:3}]
候选2: 名称:y, 技能:[{名称:sk1,exp:1},{名称:sk5,exp:4},{名称:sk3,exp:1}]
- 如果将具有2年经验的sk1用作必修课程,则仅候选人1 应该有结果
- 如果必须应用具有1年经验的sk1,则候选人1和候选人2应该出现在结果中,而候选人1应该是第一个记录,因为它有更多的经验。
- 如果具有2年经验的sk1和具有4年经验的sk5是非强制性的,则候选人1和2都应出现在结果中,但候选人2应该是结果中的第一个记录,因为它与mores技能相匹配。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)