Elasticsearch::DSLでfilterをネストしたいっ!
2021年1月9日
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の指定でドキュメントが取得できるようになりました。