Elasticsearch如何排除score = 0 docs

时间:2017-01-04 21:48:44

标签: elasticsearch lucene

我有这样的查询:

{ 
    "size": 4, 
    "query": { 
        "bool": { 
            "should": [{ 
                "terms": { "property": ["iPhone earbuds", "iPhone 6 case"] } 
            }, { 
                "constant_score": { 
                    "filter": { "match_all": {} }, 
                    "boost": 0 
                } 
            }], 
            "must_not": { 
                "ids": { 
                    "values": ["doc 1", "doc 2"], 
                    "boost": 0 
                } 
            }, 
            "minimum_should_match": 1 
        } 
    }, 
    "sort": [] 
}

一些空对象只是我构建查询JSON的工件,它们在大多数情况下都有意义,这只是我发现的最简单的例子。

为什么在得分= 0的情况下返回文档?我应该如何阻止这种情况发生?

1 个答案:

答案 0 :(得分:0)

那将是

{ 
    "constant_score": { 
        "filter": { "match_all": {} },
        "boost": 0
    }
}

匹配所有内容,对于此部分,得分为0;这也符合您的"minimum_should_match": 1规则。

你可以进一步减少你的例子(我仍然不确定你想用这个查询实现什么):

PUT /test/test/1
{
  "foo": "iphone"
}
PUT /test/test/2
{
  "foo": "iphone earbuds"
}
PUT /test/test/3
{
  "foo": "iphone case"
}
PUT /test/test/4
{
  "foo": "bar"
}

POST /test/_search
{
  "query": { 
        "bool": { 
            "should": [
                { 
                    "terms": { "foo": ["iphone"] } 
                }, { 
                    "constant_score": { 
                        "filter": { "match_all": {} },
                        "boost": 0 
                    }
                }
            ], 
            "minimum_should_match": 1 
        } 
    }
}

DELETE /test