2017-10-30 8 views
0

elasticsearchクエリにこのSQLクエリをどのように変換する必要がありますか?elasticsearchフィルタ/クエリ内の複数のbool句

SELECT * FROM myTable WHERE (id = 99 AND isonline <> 1) OR (id = 98 AND isonline <> 0) 

複数のブールフィルタを持つクエリを作成するにはどうすればよいですか。 (ボーナスは、NESTでそれを行う方法を示すことにもなります)

重複したオブジェクトキーが含まれているので私が思いついた弾力的なクエリは機能しません。

{ 
    "size": 1000, 
    "query": { 
     "match_all": {} 
    }, 
    "filter": { 
     "bool": { 
      "must": [ 
       { 
        "term": { 
         "id": 99 
        } 
       } 
      ], 
      "must_not": [ 
       { 
        "term": { 
         "isonline": true 
        } 
       } 
      ] 
     }, 
     "bool": { 
      "must": [ 
       { 
        "term": { 
         "id": 98 
        } 
       } 
      ], 
      "must_not": [ 
       { 
        "term": { 
         "isonline": false 
        } 
       } 
      ] 
     }   
    } 
} 

elasticsearchバージョン1.7

+0

それは私やあなたの 'WHERE'文は意味がありませんか? '(id = 99 AND isonline <> 1)AND(id = 98 AND isonline <> 0)' idは99と98の両方です... –

+0

@AndreiStefanあなたが正しいことは申し訳ありません。私は 'OR'を使って 'OR'を使ってクエリを編集しましたが、これは私が意図したものでした。基本的に私はIDとisonlineのステータスと照合したいです。見つけたいアイテムごとにこれらの条件が適用されます。 – darren

+0

Hehe、今、意味があります。私は私の答えを更新しました。 –

答えて

0
{ 
    "query": { 
    "bool": { 
     "should": [ 
     { 
      "bool": { 
      "must": [ 
       { 
       "term": { 
        "id": 99 
       } 
       }, 
       { 
       "term": { 
        "isonline": false 
       } 
       } 
      ] 
      } 
     }, 
     { 
      "bool": { 
      "must": [ 
       { 
       "term": { 
        "id": 98 
       } 
       }, 
       { 
       "term": { 
        "isonline": true 
       } 
       } 
      ] 
      } 
     } 
     ] 
    } 
    } 
} 
+0

クエリは0ヒットを返します。私が内側のブール条件の1つを取り除くと、少なくとも1つの結果が返ってきます。しかし、必要以上に1つのブール状態では動作しません。 – darren

+0

あなたの投稿から私の質問に答えられますか? \t 私またはあなたのWHEREステートメントは意味がありませんか? '(id = 99 AND isonline <> 1)AND(id = 98 AND isonline <> 0)' idは99と98の両方です...実際にあなたが探しているのは? –

関連する問題