Elasticsearch::DSLでfilterをネストしたいっ!

elasticsearch-dsl(gem)でドキュメントを取得したいっ!で、DSLが使えるようになったのはいいんですが、複雑なqueryを書こうとするといちいちググるのが手間なのでメモっておきます。

filter

userに直接名前が入っているような場合であれば

{
'user': '太郎'
}
require 'elasticsearch-dsl'
include Elasticsearch::DSL
definition = search do
query do
filter do
term user: '太郎'
end
end
end

上記で取得できるんですが、下記のようなドキュメントの場合は

{
'user': {
'name': '太郎'
'age': 15
}
}

普通に書こうとすれば

definition = search do
query do
filter do
term 'user.name': '太郎'
end
end
end

↑のように書きたいところですがエラーになるので、↓こっちで。

definition = search do
query do
filterd do
filter do
nested do
path 'user'
filter do
term 'user.name': '太郎'
end
end
end
end
end
end

nestedとpathの指定でドキュメントが取得できるようになりました。