首先,有一個"bool"
查詢和一個"bool"
過濾器,他們去了不同的地方,做了些微不同的事情。作爲一般規則,如果你可以使用一個過濾器來做(它們中的許多可以被緩存,並且即使不是更快一點)。如果您需要"match"
,那麼您需要查詢。
你引用實際上可以用任何一種方式在頁面上的例子:
作爲查詢:
POST /test_index/_search
{
"query": {
"bool": {
"must": {
"term": {
"user": "kimchy"
}
},
"must_not": {
"range": {
"age": {
"from": 10,
"to": 20
}
}
},
"should": [
{
"term": {
"tag": "wow"
}
},
{
"term": {
"tag": "elasticsearch"
}
}
],
"minimum_should_match": 1,
"boost": 1
}
}
}
或過濾器(在filtered query):
POST /test_index/_search
{
"query": {
"filtered": {
"filter": {
"bool": {
"must": {
"term": {
"user": "kimchy"
}
},
"must_not": {
"range": {
"age": {
"from": 10,
"to": 20
}
}
},
"should": [
{
"term": {
"tag": "wow"
}
},
{
"term": {
"tag": "elasticsearch"
}
}
],
"minimum_should_match": 1
}
}
}
}
}
另外,我完全對ES文件感到沮喪。我已經和他們一起工作了幾年,現在看起來他們似乎並沒有好轉。也許負責文檔的人員並不在乎。陰謀論認爲,糟糕的文檔可以幫助公司銷售專業服務。
是的,我希望公司改善文檔或失敗慘敗。我只想看到兩種選擇,很抱歉說。 –
其實我還沒有看到它,但它看起來像他們在2.0中改變了事情。看起來你不再需要過濾的查詢,只是布爾查詢:https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-bool-query.html –