如何在elasticsearch查询中实现以下条件?

时间:2016-06-13 09:25:57

标签: elasticsearch

我有一个索引,其中一些文档的字段名为" access_type" 。它可以有两个值,即"教师"或者"学生"。 对于"教师"作为" access_type"的值,将会有另一个名为" faculties"这是一个教师姓名列表。 因此,示例文档如下所示:

{
  "access_type": "faculty",
   "faculties": [
      "facultyId1",
      "facultyId2",
      "facultyId3"
   ]
}

现在,如果我们有两个输入,则说一个用于access_type,另一个用于faculties。 如果我得到以下输入"教师"和" facultyId4" 。首先,我需要过滤掉与访问类型匹配的所有文档" faculty"然后在得到的结果中," facuultyId4"应该搜索字段" faculties"。因为" facultyId4"不在上面的文件中,它不应该被认为是一个打击。 如何将其实现为弹性搜索查询?

2 个答案:

答案 0 :(得分:1)

POST http://your.elastic.host:9200/index/type/_search

{
  "query": {
    "filtered": {
      "query": {
        "match_all": {}
      },
      "filter": {
        "bool": {
          "must": [
            {
              "term": {
                "access_type": "faculty"
              }
            },
            {
              "term": {
                "faculties": "facultyId4"
              }
            }
          ]
        }
      }
    }
  }
}

答案 1 :(得分:0)

希望这能用于工作。

GET index/type/_search
{
    "query": {
        "filtered": {
           "filter": {
               "and": {
                  "filters": [
                     {
                         "query": {
                             "match": {
                                "access_type": "faculty"
                             }
                         }
                     },
                     {
                         "query": {
                             "match": {
                                "faculties": "facultyId4"
                             }
                         }
                     }
                  ]
               }
           }
        }
    }
}