2014-10-27 4 views
2

Я хотел бы иметь возможность исключить несколько узлов в моем запросе ElasticSearch. В настоящее время этот код работает отлично, но он будет исключать только два узла ($ nodeId1 и $ nodeId2).ElasticSearch bool search using array

Как изменить этот запрос, чтобы я мог использовать массив, который будет содержать столько идентификаторов узлов, сколько мне нужно? Спасибо.

$data_string = '{ 
    "from" : 0, "size" : "' . $maximumResults . '", 
    "query": { 
     "filtered": { 
      "query": { 
       "match" : { 
        "thread.title" : { 
         "query" : "' . $threadTitle . '", 
         "operator": "or" 
        } 
       } 
      }, 
      "filter": { 
       "bool" : { 
        "must" : [], 
        "must_not" : [ 
         { 
          "term" : {"thread.discussion_id" : "' . $currentThreadId . '"} 
         }, 
         { 
          "term" : {"thread.node" : "' . $nodeId1 . '"} 
         }, 
         { 
          "term" : {"thread.node" : "' . $nodeId2 . '"} 
         }          
        ], 
        "should" : [] 
       } 
      } 
     } 
    } 
}'; 

ответ

2

Вы можете использовать фильтр термины:

$data_string = '{ 
    "from" : 0, "size" : "' . $maximumResults . '", 
    "query": { 
     "filtered": { 
      "query": { 
       "match" : { 
        "thread.title" : { 
         "query" : "' . $threadTitle . '", 
         "operator": "or" 
        } 
       } 
      }, 
      "filter": { 
       "bool" : { 
        "must" : [], 
        "must_not" : [ 
         { 
          "term" : {"thread.discussion_id" : "' . $currentThreadId . '"} 
         }, 
         { 
          "terms" : {"thread.node" : ["' . $nodeId1 . '", "' . $nodeId2 . '", "' . $nodeId3 . '"} 
         }          
        ], 
        "should" : [] 
       } 
      } 
     } 
    } 
}'; 
+0

Спасибо, Дэн. Это именно то, что мне нужно, и ваш пример отлично работал. Я закончил создание простого $ whereclause, и теперь я могу легко добавить столько узлов, сколько захочу. –