相关数据的弹性查询
Elastic query for relevant data
从下面开始,候选人数据结构如何为查询候选人编写获取记录的查询必须具有 java 经验 > 1 和 SQL 经验 > 2 并且最好有 angular 经验 > 1 但不是必须的。是否可以使用以下数据结构,或者如果不能如何构造该数据
//Cand - 1
{
"canId": 1,
"skill": "Java",
"yearsOfExp": 2
},
{
"canId":1,
"skill": "SQL",
"yearsOfExp": 1
},
{
"canId": 1,
"skill": "Angular",
"yearsOfExp": 1
},
{
"canId": 1,
"skill": "AngularJS",
"yearsOfExp": 1
}
//Cand - 2
{
"canId": 2,
"skill": "Jr.Software Developer",
"yearsOfExp": 3
},
{
"canId":2,
"skill": "SQL",
"yearsOfExp": 2
},
{
"canId": 2,
"skill": "Angular",
"yearsOfExp": 2
},
{
"canId": 2,
"skill": "AngularJS",
"yearsOfExp": 5
}
how to structure that data
修改了数据结构,对数据进行了索引(以嵌套文档的形式)。 nested type 是对象数据类型的特殊版本,它允许以一种可以彼此独立查询的方式对对象数组进行索引。
添加包含索引数据、映射、搜索查询和搜索结果的工作示例。
索引映射:
{
"mappings": {
"properties": {
"data": {
"type": "nested"
}
}
}
}
索引数据:
{
"canId": 1,
"data": [
{
"skill": "Java",
"yearsOfExp": 2
},
{
"skill": "SQL",
"yearsOfExp": 3
},
{
"skill": "Angular",
"yearsOfExp": 2
},
{
"skill": "AngularJS",
"yearsOfExp": 1
}
]
}
搜索查询:
{
"query": {
"bool": {
"must": [
{
"nested": {
"path": "data",
"query": {
"bool": {
"must": [
{
"match": {
"data.skill": "Java"
}
}
],
"filter": {
"script": {
"script": {
"source": "doc['data.yearsOfExp'].value > 1",
"lang": "painless"
}
}
}
}
}
}
},
{
"nested": {
"path": "data",
"query": {
"bool": {
"must": [
{
"match": {
"data.skill": "SQL"
}
}
],
"filter": {
"script": {
"script": {
"source": "doc['data.yearsOfExp'].value > 2",
"lang": "painless"
}
}
}
}
}
}
}
],
"should": {
"nested": {
"path": "data",
"query": {
"bool": {
"must": [
{
"match": {
"data.skill": "Angular"
}
}
],
"filter": {
"script": {
"script": {
"source": "doc['data.yearsOfExp'].value > 1",
"lang": "painless"
}
}
}
}
}
}
}
}
}
}
搜索结果:
"hits": [
{
"_index": "stof_64339149",
"_type": "_doc",
"_id": "1",
"_score": 3.6119184,
"_source": {
"canId": 1,
"data": [
{
"skill": "Java",
"yearsOfExp": 2
},
{
"skill": "SQL",
"yearsOfExp": 3
},
{
"skill": "Angular",
"yearsOfExp": 2
},
{
"skill": "AngularJS",
"yearsOfExp": 1
}
]
}
}
]
从下面开始,候选人数据结构如何为查询候选人编写获取记录的查询必须具有 java 经验 > 1 和 SQL 经验 > 2 并且最好有 angular 经验 > 1 但不是必须的。是否可以使用以下数据结构,或者如果不能如何构造该数据
//Cand - 1
{
"canId": 1,
"skill": "Java",
"yearsOfExp": 2
},
{
"canId":1,
"skill": "SQL",
"yearsOfExp": 1
},
{
"canId": 1,
"skill": "Angular",
"yearsOfExp": 1
},
{
"canId": 1,
"skill": "AngularJS",
"yearsOfExp": 1
}
//Cand - 2
{
"canId": 2,
"skill": "Jr.Software Developer",
"yearsOfExp": 3
},
{
"canId":2,
"skill": "SQL",
"yearsOfExp": 2
},
{
"canId": 2,
"skill": "Angular",
"yearsOfExp": 2
},
{
"canId": 2,
"skill": "AngularJS",
"yearsOfExp": 5
}
how to structure that data
修改了数据结构,对数据进行了索引(以嵌套文档的形式)。 nested type 是对象数据类型的特殊版本,它允许以一种可以彼此独立查询的方式对对象数组进行索引。
添加包含索引数据、映射、搜索查询和搜索结果的工作示例。
索引映射:
{
"mappings": {
"properties": {
"data": {
"type": "nested"
}
}
}
}
索引数据:
{
"canId": 1,
"data": [
{
"skill": "Java",
"yearsOfExp": 2
},
{
"skill": "SQL",
"yearsOfExp": 3
},
{
"skill": "Angular",
"yearsOfExp": 2
},
{
"skill": "AngularJS",
"yearsOfExp": 1
}
]
}
搜索查询:
{
"query": {
"bool": {
"must": [
{
"nested": {
"path": "data",
"query": {
"bool": {
"must": [
{
"match": {
"data.skill": "Java"
}
}
],
"filter": {
"script": {
"script": {
"source": "doc['data.yearsOfExp'].value > 1",
"lang": "painless"
}
}
}
}
}
}
},
{
"nested": {
"path": "data",
"query": {
"bool": {
"must": [
{
"match": {
"data.skill": "SQL"
}
}
],
"filter": {
"script": {
"script": {
"source": "doc['data.yearsOfExp'].value > 2",
"lang": "painless"
}
}
}
}
}
}
}
],
"should": {
"nested": {
"path": "data",
"query": {
"bool": {
"must": [
{
"match": {
"data.skill": "Angular"
}
}
],
"filter": {
"script": {
"script": {
"source": "doc['data.yearsOfExp'].value > 1",
"lang": "painless"
}
}
}
}
}
}
}
}
}
}
搜索结果:
"hits": [
{
"_index": "stof_64339149",
"_type": "_doc",
"_id": "1",
"_score": 3.6119184,
"_source": {
"canId": 1,
"data": [
{
"skill": "Java",
"yearsOfExp": 2
},
{
"skill": "SQL",
"yearsOfExp": 3
},
{
"skill": "Angular",
"yearsOfExp": 2
},
{
"skill": "AngularJS",
"yearsOfExp": 1
}
]
}
}
]