2

関係を持つモデルに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 つ」を検索したいだけです。

どんな助けでも大歓迎です!

4

2 に答える 2

0

OK、次のように見えます:r = Article.search query: {match: {"categories.title" => 'one'}}動作しますが、ネストされたもので何が起こっているのかを誰かが説明できる場合に備えて、質問を開いたままにします...

于 2014-10-30T14:47:04.517 に答える