関係を持つモデルにelasticsearch-model gemを使用していhas_many
ます。Article
ドキュメントと一致させるために、モデルがであり、関係が であるとしましょうhas_many categories
。そこで、次のように顧客のシリアライザーを作成しました (ドキュメントから直接)。
def as_indexed_json(options={})
self.as_json(
include: { categories: { only: :title},
})
end
シリーズ化が進んでいるようです。記事の例の as_indexed_json の結果には、"categories" => {"title"=> "one", "title"=> "two", "title"=> "three"}
ブロックが含まれています。
私が苦労していて、ドキュメントで見つけることができなかったのは、このネストされたフィールドを検索する方法です。
これが私が試したことです:
ネストされたクエリに関するelasticsearchのドキュメントから、次のようになるはずだと考えました。
r = Article.search query: {
nested: {
path: "categories",
query: {match: {title: "one"}}
}
}
しかしr.results.first
、そうするとエラーが発生します: nested object under path [categories] is not of nested type]
...
シリアライザーの1行を次のように変更して追加しようとしましたinclude: { categories: { type: "nested", only: :title}
が、それは何も変更しません。それでも、カテゴリはネストされた型ではないと言います。
もちろん、次のようにネストせずにフィールドをクエリしてみました。
r = Article.search query: {match: {categories: 'one'}}
しかし、それだけでは結果は返されません。
次のように全文検索します。
r = Article.search query: {match: {_all: 'one'}}
結果を返しますが、もちろん、カテゴリ フィールドで「1 つ」を検索したいだけです。
どんな助けでも大歓迎です!