2017-01-23 3 views
0

Ich versuche, eine Abfrage zu erhalten mit beiden müssen und must_not, aber hatte kein Glück mit der Syntax, die ich versuche. Ich sehe eine Menge Leute in StackOverflow, die Anführungszeichen auf beiden Seiten verwenden, wie sie es in einem Curl-Call wären, aber dies ist direkt aus einer Knotenanwendung heraus.Elasticsearch js Abfrage mit muss und muss_nicht

Ich werde die Abfrage, die funktioniert, zeigen, und ich versuche einfach hinzuzufügen, was ich nicht möchte in das Ergebnis einbezogen werden soll. In beiden Fällen sollte das Ergebnis übereinstimmen, da es sich nur um Daten handelt, die sich in einer lokalen Entwicklungsumgebung befinden.

Zuerst wird die Arbeits query:

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); 
}); 

Ausgang:

{ 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' } } ] } } 

nun die fehlerhafte Abfrage:

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); 
}); 

Ausgang:

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

Jede Hilfe hier würde sehr geschätzt werden.

Antwort

0

ich am Ende mit ein wenig „reverse Logik“, aber hier ist das, was funktioniert ..

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); 
    }); 
Verwandte Themen