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の指定でドキュメントが取得できるようになりました。