使用ElasticSearch上的elastic4s查询嵌套字段

时间:2014-10-29 00:19:39

标签: elasticsearch elastic4s

我想查询在ES中编入索引的嵌套文档。

例如,嵌套字段为user,其中包含两个字段idname。我想查询名称与字段user.name完全匹配的所有文档。

无法弄清楚如何使用elastic4s DSL。

1 个答案:

答案 0 :(得分:3)

这是你在elastic4s中嵌套查询的方法:

首先,设置索引,使其具有嵌套类型:

  client.execute {
    create index "nested" mappings {
      "show" as {
        "actor" typed NestedType
      }
    }
  }

然后是一些样本数据

  client.execute(
    index into "nested/show" fields(
      "name" -> "game of thrones",
      "actor" -> Seq(
        Map("name" -> "peter dinklage", "birthplace" -> "Morristown"),
        Map("name" -> "pedro pascal", "birthplace" -> "Santiago")
      )
    )
  )

然后是关键部分。要进行搜索,您使用了nested(或在弹性4 1.4测试版中,nestedQuery)来"进入"嵌套范围,您可以使用任何标准查询类型进行搜索。在这里,我只使用简单的termQuery搜索。

client.execute {
  search in "nested/show" query nested("actor").query(termQuery("actor.name" -> "dinklage"))
}