考虑一些包含嵌套文档(技能)的索引文档( employees ),其中包含一个属性,比如说“ label ”,这样每个员工都与一些技能相关联。我想从ElasticSearch索引中获取所有员工(文档),他们掌握了一组给定的技能,例如“ Python ”和“ Java ”。
我正在努力找到一个合适的查询,以确保所有给定的技能(“Python”,“Java”)在的技能组合中出现至少一次一名员工,虽然他们不必须一起出现!
我的映射与此类似:
{
"mappings": {
"employee": {
"_all": { "enabled": false },
"properties": {
"id" : { "type": "integer" },
"first_name" : { "type": "string" },
"last_name" : { "type": "string" },
"skills": {
"type": "nested",
"properties": {
"label": { "type": "string" },
"rating": { "type": "integer" }
}
}
}
}
}
}
所以我正在寻找有关如何检索所需结果的任何解决方案(查询)。
答案 0 :(得分:1)
您需要在nested
查询中使用两个 bool/filter
过滤器,如下所示:
POST /employees/employee/_search
{
"query": {
"bool": {
"filter": [
{
"nested": {
"path": "skills",
"query": {
"term": {
"skills.label": "python"
}
}
}
},
{
"nested": {
"path": "skills",
"query": {
"term": {
"skills.label": "java"
}
}
}
}
]
}
}
}