【问题标题】:Elastic query for relevant data相关数据的弹性查询
【发布时间】:2021-01-28 00:34:28
【问题描述】:

从下面,候选人数据结构如何编写查询以获取查询候选人的记录必须具有Java经验> 1和SQL经验> 2并且有角度经验> 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
 }

【问题讨论】:

  • 显示你的映射
  • 我没有配置任何mppings
  • @Ramakrishna Reddy 你有机会看我的回答吗,期待得到你的反馈????
  • @Bhavya 它正在工作,非常感谢 :)
  • @RamakrishnaReddy 我不确定,但可以通过嵌套查询中的函数得分来实现。

标签: elasticsearch relevance


【解决方案1】:

如何构造数据

修改了数据的结构,并对数据进行了索引(以嵌套文档的形式)。 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
            }
          ]
        }
      }
    ]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-03
    • 2019-06-09
    • 1970-01-01
    • 2015-04-29
    • 1970-01-01
    相关资源
    最近更新 更多