我是弹性搜索的新手,所以我的例子是:
bool过滤器中有3个部分:
must All of these clauses must match. The equivalent of AND. must_not All of these clauses must not match. The equivalent of NOT. should At least one of these clauses must match. The equivalent of OR.
如何预先形成一个should_not查询?
提前致谢:)
答案 0 :(得分:10)
为了获得类似" should_not"请尝试以下查询:
GET /bank/account/_search { "size": 2000, "query": { "bool": { "must": { "match_all": {} }, "should": { "bool": { "must_not": { "match": { "city": "XYZ" } } } } } } }
在这种情况下,条款"必须"需要检索所有结果(结果与城市" XYZ"也),但该特定结果的分数降低。
答案 1 :(得分:5)
这取决于你究竟想要一个" should_not"发挥作用。
由于should
大致相当于布尔OR(即返回A或B或C为真的文档),因此有一种方法可以考虑" should_not"大致相当于 NOT(A OR B或C)。在布尔逻辑中,这与NOT A AND NOT B和NOT C相同。在这种情况下," should_not"只需将所有子句添加到bool过滤器的must_not
部分即可完成行为。
答案 2 :(得分:0)
您可以应用not过滤器,然后应该过滤should_not operation。
"filter": {
"not": {
"filter": {
"bool": {
"should": [
{}
]
}
}
}
}
答案 3 :(得分:0)
此查询类似于sql 其中categoryId =“ category123” AND(localeId!=“ de_DE”或productId!=“ productMediatest-productid01”)
{
"query": {
"bool": {
"must": [
{
"term": {
"categoryId": "category123"
}
},
{
"bool": {
"should": [
{
"bool": {
"must_not": {
"term": {
"localeId": "de_DE"
}
}
}
},
{
"bool": {
"must_not": {
"term": {
"productId": "productMediatest-productid01"
}
}
}
}
]
}
}
]
}
}
}