如何检查elasticsearch中是否存在数组字段的特定元素?

时间:2015-06-19 06:00:17

标签: elasticsearch

这是我索引中的示例文档

{
    "name": "sandy",
    "age": "25",
    "ug":["B.tech"],
    "pg":["MS","Phd"]
}

我想根据PG资格过滤候选人。我想要两种类型的过滤器。

  1. 在某些情况下,PG字段为空。因此,我只需要筛选出具有PG资格的人。

  2. 我希望PG资格的候选人“MS”。但其他人不喜欢“MBA”等等。这将作为“pg”数组下的第一个元素给出。 我如何在Elasticsearch中实现它?

1 个答案:

答案 0 :(得分:0)

考虑到提供的信息,我建议如下。

  1. 对于您的第一个问题,请尝试使用存在过滤器来过滤包含数组中至少一个PG值的记录。

    { "查询":{ " constant_score":{   "存在":{     " field":" pg"   } } } }

  2. 关于第二个问题,考虑到结果可以在数组中包含其他元素以及MS的事实如下所示。

    { "查询":{ " bool":{   "必须":[     {       " term":{         " additionalSkill":" java"       }     },     {       " constant_score":{         "过滤":{           "存在":{             " field":" additionalSkill"           }         }       }     }   ] } } }

  3. 如果您的用例dint允许数组中除MS以外的任何其他元素,那么您可能必须使用elasticsearch中的脚本功能来限制结果记录。