2015-11-04 94 views
0

在elasticsearch文檔在這個環節一個布爾查詢elasticsearch文檔: https://www.elastic.co/guide/en/elasticsearch/reference/1.4/query-dsl-bool-query.html混淆約含JSON的布爾查詢

這並不是說包含結構。如果我按照他們的方式使用bool,那就完全錯了。我需要用查詢/過濾/過濾查詢的一些愚蠢的組合來包圍它。我不確定用彈性形成json查詢的正確方法是什麼。這些文件似乎在許多地方完全相互矛盾,涉及到哪些地方以及如何進行。任何彈性研究專家都知道如何正確地形成查詢?

回答

1

首先,有一個"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文件感到沮喪。我已經和他們一起工作了幾年,現在看起來他們似乎並沒有好轉。也許負責文檔的人員並不在乎。陰謀論認爲,糟糕的文檔可以幫助公司銷售專業服務。

+0

是的,我希望公司改善文檔或失敗慘敗。我只想看到兩種選擇,很抱歉說。 –

+0

其實我還沒有看到它,但它看起來像他們在2.0中改變了事情。看起來你不再需要過濾的查詢,只是布爾查詢:https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-bool-query.html –