2016-06-20 11 views
0

In Elasticsearch habe ich diesen Code, der einen Thread und eine Abfrage entspricht. Es funktioniert derzeit gut für die Zuordnung eines Threads, aber ich habe ein Array von Threads. Und ich möchte einen Treffer erhalten, wenn das Feld "thread" mit einem der Threads im Array übereinstimmt. Zum Beispiel, wenn ich ein Array von ['1', '2', '3'] habe, möchte ich übereinstimmen, wenn das "thread" -Feld mit '1', '2' oder '3' übereinstimmt, nicht nur ' 1 '. Wie mache ich das?

client.search({ 
    index: 'searchable-message', 
    body: { 
     query: { 
     bool: { 
      must: [ 
      { 
       match: { 
       thread: '1' //<--WORKS FOR ONE, BUT NOT ARRAY 
       } 
      }, 
      { 
       multi_match: { 
       query: req.query.q, 
       fields: ['message_text', 'stripped_text', 'links', 'documents.text_contents'] 
       } 
      } 
      ] 
     } 
     } 
    } 
    }) 

Antwort

1

Ich denke, der beste Weg, dies zu erreichen, wäre eine andere Abfragemethode terms genannt zu verwenden.

Versuchen Sie, Sie match Abfrage mit einer terms Abfrage ändern. Here ist die Begriffe Abfrage Dokumentation.

Beispiel:

{ 
    "terms": { 
     "thread": ['1', '2', '3'] 
    } 
} 

Die bool Abfrage documentation auch ein schönes Beispiel für die term Abfrage liefert, die eine ähnliche Syntax mit der terms Abfrage hat:

{ 
    "bool" : { 
     "must" : { 
      "term" : { "user" : "kimchy" } 
     }, 
     "filter": { 
      "term" : { "tag" : "tech" } 
     }, 
     "must_not" : { 
      "range" : { 
       "age" : { "from" : 10, "to" : 20 } 
      } 
     }, 
     "should" : [ 
      { 
       "term" : { "tag" : "wow" } 
      }, 
      { 
       "term" : { "tag" : "elasticsearch" } 
      } 
     ] 
    } 
} 

this helps :)

+0

Das hat perfekt funktioniert! Super danke! – user3835653