Elasticsearch嵌套过滤(elastic4s,scala)

时间:2016-12-20 16:54:25

标签: scala elasticsearch elastic4s

我正在使用Elasticsearch 1.7和elastic4s DSL。 我的问题是我无法添加和&或过滤嵌套文档。 例如,这是我的案例类Candidate实例的JSON表示:

{
  "name": "Samy"
  "interviews": [
    {
      "clientId": 0,
      "stateId": "CANCELED",
    },
    {
      "clientId": 1,
      "stateId": "APPROVED"
    }
  ]

这是我的过滤器:

def filtering(interviewAndCandidates: IntCand)(implicit user: PublicUser): Seq[FilterDefinition] = {
nestedFilter("interviews").filter(termFilter("clientId", user.id)) ::
List(or(interviewAndCandidates.interviews.map(state ⇒ nestedFilter("interviews").filter(termFilter("stateId", state)))))
}

然后我构建查询:

var request: SearchDefinition = search in "myIndex" -> "candidate" query {
  filteredQuery query {
    matchAllQuery
  } filter {
    and(filters)
  }
}

使用:

case class IntCand(interviews: List[String])

case class Candidate(name: String, interviews: List[Interview])

case class Interview(clientId: Long, stateId: String)

问题是当我过滤IntCand(List(" CANCELLED"))和clientId = 1时,响应显示我是候选人(我希望过滤clientId和访谈)

1 个答案:

答案 0 :(得分:0)

我通过对数据进行非规范化来取得成功