所以我试图使用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);
});
答案 0 :(得分:2)
你几乎就在那里。您的must_not
查询应该是一个对象数组,而不仅仅是一个对象:
"bool" : {
"must_not" : [
{"terms": { "id": user.blacklist}},
{"term": { "blacklist": user.id}}
]
}
不要忘记每个词搜索的额外括号。
在the ElasticSearch documentation中,注意示例查询中的should
子句是一个数组而不是一个对象,因为它有多个子子句。