2017-01-23 7 views
0

mustとnot_notの両方で実行するクエリを取得しようとしていますが、試みている構文に何の不運もありませんでした。 StackOverflowにはCurlコールのように両側に引用符を使用する人がたくさんいますが、これはノードアプリケーションからまっすぐです。Elasticsearch js query with must and must_not

私は動作するクエリを表示しますが、私は単にを追加しようとしていません。が結果に含まれたいと思っています。どちらの場合でも、これはローカルの開発環境にあるゴミデータなので、結果は一致するはずです。

まず取り組んクエリ:

client.search({ 
    index: config.ES_INDEX, 
    type: "issue", 
    body: { 
     query: { 
      match: { 
       issue_state: 'Closed' 
      } 
     }, 
     size: 1000 
    } 

}).then(function(resp){ 
    console.log(util.inspect(resp, {showHidden: false, depth: null})); 
}).catch(function(err){ 
    console.log('Failed to search. ' + err.message); 
}); 

出力:今

{ took: 5, 
timed_out: false, 
    _shards: { total: 5, successful: 5, failed: 0 }, 
    hits: 
    { total: 1, 
    max_score: 1, 
    hits: 
     [ { _index: 'noc_tool', 
      _type: 'issue', 
      _id: 'Sy2IQFMLe', 
      _score: 1, 
      _source: 
      { job_name: 'Job Name 1', 
      is_maintenance: 'no', 
      servicenow_id: 'lkjjklh', 
      type: 'Chase', 
      start_time: '1970-01-01T23:15:00.000Z', 
      maint_reminder: null, 
      update_duration: '4 Hours', 
      location: 'Test Group', 
      issue_state: 'Closed', 
      notes: [ { created_on: 1484063571941, body: 'lkjlkjhlkj' } ], 
      emailService: { lastEmailAt: 1484237594114 }, 
      created_on: 1484063571941, 
      updated_on: 1484240538801, 
      reason: 'because I want to' } } ] } } 

、失敗したクエリ:

client.search({ 
    index: config.ES_INDEX, 
    type: "issue", 
    body: { 
     query: { 
      bool: { 
       must: [ 
        { 
         term: { 
          issue_state: 'Closed' 
         } 
        } 
       ], 
       must_not: [ 
        { 
         term: { 
          is_maintenance: 'yes' 
         } 
        } 
       ] 
      } 
     }, 
     size: 1000 
    } 

}).then(function(resp){ 
    console.log(util.inspect(resp, {showHidden: false, depth: null})); 
}).catch(function(err){ 
    console.log('Failed to search. ' + err.message); 
}); 

出力:

{ took: 6, 
timed_out: false, 
    _shards: { total: 5, successful: 5, failed: 0 }, 
    hits: { total: 0, max_score: null, hits: [] } } 

ここにお手伝いいただければ幸いです。

答えて

0

私は

return new Promise(function(resolve, reject) { 
    client.search({ 
     index: config.ES_INDEX, 
     type: "issue", 
     body: { 
      query: { 
       bool: { 
        must:[ 
         { 
          match: { 
           issue_state: 'Closed' 
          } 
         }, 
         { 
          match: { 
           is_maintenance: 'no' 
          } 
         } 
        ] 
       } 
      }, 
      size: 1000 
     } 

    }).then(function (resp) { 
     resolve (resp.hits.hits); 
    }).catch(function (err) { 
     reject('Failed to search. ' + err.message); 
    }); 
...ちょっと「逆ロジック」を使用して終わったが、ここで働いているものです