2016-01-07 100 views
0

所以我試圖使用一個bool查詢來檢查用戶的ID與其他用戶的黑名單,以及刪除用戶在結果中列入黑名單的用戶。Elasticsearch - Bool查詢無法解析搜索

每個查詢都能正常工作,但不在一起。我在elasticsearch文檔的印象下,在一個布爾查詢中,我可以用逗號將它們鏈接起來。

如果有人能告訴我我哪裏出錯了,那將非常感激。

client.search({ 
    index: 'firebase', 
    type: 'user', 
    size: 500, 
    body: { 
    "query": { 
     "filtered" : { 
      "query" : { 
       "bool" : { 
        "must_not" : { 
        "terms": { "id": user.blacklist}, 
        "term": { "blacklist": user.id} 
        } 
       } 
      }, 
      "filter": { 
       "and": query 
      } 

     } 
} 

} 
}).then(function (resp) { 
    var hits = resp.hits.hits; 
    res.send(hits); 

    console.log(hits); 
}, function (err) { 
    console.log(err); 
    res.sendStatus(500); 
}); 

回答

2

你快到了。你must_not查詢應該是對象的數組,而不是隻是一個對象:

"bool" : { 
    "must_not" : [ 
    {"terms": { "id": user.blacklist}}, 
    {"term": { "blacklist": user.id}} 
    ] 
} 

不要忘記圍繞每個術語(一個或多個)搜索額外的支架。

the ElasticSearch documentation中,注意示例查詢中的should子句是一個數組而不是一個對象,因爲它具有多個子子句。

+2

謝謝你......一個問題。 user.blacklist是一個ID數組,不應該是一個術語搜索,以便遍歷它來匹配ID? –

+0

如果你想匹配多個值,你說得對,要走的路。 –

+0

糟糕,你是對的。我應該認識到黑名單是一個數組而不是一個單一的值。我會編輯我的答案。 – Jeremy