在Elasticsearch中查询可选字段

时间:2017-07-26 10:27:35

标签: elasticsearch

我有一个ES类型课程,包含2个可选字段培训师 trainingCompany ,以便在每个文档中我们都有培训师 trainingCompany 不是两者

我尝试过此查询来过滤培训师和/或培训公司的课程:

"query": {
    "bool": {
      "must_not": [
        {
          "terms": {
            "trainingCompany.slug": [
              "company-slug"
            ]
          }
        },
        {
          "terms": {
            "trainer.slug": [
              "trainer-slug"
            ]
          }
        }
      ]
    }
  }

但是,我得到了所有文件作为回报。 我认为我需要一个存在来检查每个字段是否存在,但仍然无法弄明白。

如果需要,这是一个示例课程:

    {
              "title": "title",
              "description": "description",
              "slug": "slug",
              "duration": 10,
              "language": "EN",
              "price": 1500,
              "trainingCompany": {
                "name": "The Bridge",
                "slug": "The-Bridge",
            }
}
{
          "title": "title",
          "description": "description",
          "slug": "slug",
          "duration": 1,
          "language": "FR",
          "price": 500,
          "trainer": {
            "firstname": "Jemli",
            "lastname": "Fathi",
            "slug": "Jemli-Fathi",
            "photo": "url"
          }
        }

1 个答案:

答案 0 :(得分:2)

根据您的映射,您应该使用keyword子字段,如下所示:

"query": {
    "bool": {
      "must_not": [
        {
          "terms": {
            "trainingCompany.slug.keyword": [
              "company-slug"
            ]
          }
        },
        {
          "terms": {
            "trainer.slug.keyword": [
              "trainer-slug"
            ]
          }
        }
      ]
    }
  }