Elasticsearch - Bool查询无法解析搜索

时间:2016-01-07 10:45:04

标签: elasticsearch

所以我试图使用bool查询来检查用户的ID与其他用户的黑名单,以及删除用户已在结果中列入黑名单的用户。

每个查询都可以自行完成,但不能一起使用。我在弹性搜索文档的印象中,在bool查询中我可以用逗号链接它们。

如果有人能告诉我哪里出错了,我们将非常感激。

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

1 个答案:

答案 0 :(得分:2)

你几乎就在那里。您的must_not查询应该是一个对象数组,而不仅仅是一个对象:

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

不要忘记每个词搜索的额外括号。

the ElasticSearch documentation中,注意示例查询中的should子句是一个数组而不是一个对象,因为它有多个子子句。