获取有关弹性搜索的相关数据

问题描述

需要将搜索条件应用于候选人的技能和工作经验

以下是条件

  1. 技能可以是强制性的,也可以是非强制性的
  2. 如果我们将技能作为必修课程,则搜索结果包括具有技能和排序的记录
  3. 如果我们应用技能,因为非强制性搜索结果应基于最匹配的技能进行排序
  4. 具有一定技能的年限也可以应用,例如经验大于或小于几年;如果应用年限,则搜索结果中包含与技能名称和经验年限相匹配的记录,并按最匹配的记录进行排序

下面是有关无法应用的映射和查询的详细信息

// 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}]

搜索查询技能可以是强制性的,也可以是非强制性的

  1. 如果将具有2年经验的sk1用作必修课程,则仅候选人1 应该有结果
  2. 如果必须应用具有1年经验的sk1,则候选人1和候选人2应该出现在结果中,而候选人1应该是第一个记录,因为它有更多的经验。
  3. 如果具有2年经验的sk1和具有4年经验的sk5是非强制性的,则候选人1和2都应出现在结果中,但候选人2应该是结果中的第一个记录,因为它与mores技能相匹配。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...