ES でインデックス付けされたネストされたドキュメントをクエリしたいと考えています。
たとえば、ネストされたフィールドはと の 2 つのフィールドをuser
含みます。name が field と完全に一致するすべてのドキュメントを照会したいと考えています。id
name
user.name
そのためにelastic4s DSLを使用する方法がわかりません。
ES でインデックス付けされたネストされたドキュメントをクエリしたいと考えています。
たとえば、ネストされたフィールドはと の 2 つのフィールドをuser
含みます。name が field と完全に一致するすべてのドキュメントを照会したいと考えています。id
name
user.name
そのためにelastic4s DSLを使用する方法がわかりません。
これは、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
(elastic4s 1.4 ベータ版ではnestedQuery
) を使用して、ネストされたスコープに「ドロップイン」し、標準のクエリ タイプを使用して検索できます。ここでは単純なtermQuery
検索を使用しています。
client.execute {
search in "nested/show" query nested("actor").query(termQuery("actor.name" -> "dinklage"))
}