2017-11-07 3 views
1

私はこのような文書とESインデックスを持っている:ElasticSearch:ネストされたリスト内の特定の位置に関する問い合わせ

[{"type": "alpha", "order": ['john', 'michael', 'tony']}] 
[{"type": "alpha", "order": ['michael', 'john', 'tony']}] 
[{"type": "beta", "order": ['michael', 'john', 'tony']}] 

私のクエリは、「タイプ」は「アルファ」とどこ」であるレコードを返す必要がありますjohn "は" order "リストの2番目の位置にあります。私はネストされたクエリを試してきましたが、それを "タイプ"のトップレベルの条件と組み合わせることはできないようです。ヒントは大歓迎です。

答えて

1

これは現在のマッピングでは実行できません。

あなたはこのようなあなたのデータを整形する必要があります。

[{"type": "alpha", "order": {"1":"john", "2":"michael", "3":"tony"]}] 

またはこのような:

[{"type": "alpha", "order": [{"rank":1,"name":"john"}, {"rank":2,"name":"michael"}, {"rank":3, "name":"tony"}]}] 

第二の溶液は、非効率的である、ネストされた「順序」とネストされたクエリが必要ですが、もしあなたはたくさんの注文を受けています。これは、より良い解決策になるかもしれないので、mapping explosionを防ぐためです。

+0

これは非常に役に立ちます!私は "ランク"を含むようにそれを修正することができますし、次は動作するはずです。 クエリ= { 「クエリ」:{ は「ネストされた」:{ 「パス」:「順序」、 『クエリ』:これを「タイプ」の制約を追加する方法をしかし、それはまだ私には明らかではありません{ "BOOL":{ "必須":[{ "一致":{ 「ランク ":2 }} ] } } } } }お問合せが固定 – dust

+1

: { "クエリ ":{ " bool 「:{ "必須":[{ は "ネスト":{ "パス": "順序"、 "クエリ":{ "一致":{ "order.rank":2 }} } }、{ "一致":{ "タイプ": "アルファ" }}]} }} ネストされたフィールド "order.rank" に用心は、完全なパスを与えるようになりました再び。 –

関連する問題