2016-02-27 34 views
1

我試圖將搜索結果縮小到任何給定類別中。 我的搜索機構,但是現在elasticsearch 2.2.0工程將搜索結果縮小到多個分類

{ 
    "filter":{ 
     "bool":{ 
     "should":[ 
      { 
       "match":{ 
        "categories":"16310211" 
       } 
      }, 
      { 
       "match":{ 
        "categories":"493964" 
       } 
      } 
     ] 
     } 
    }, 
    "size":25, 
    "from":0 
} 

我們正在使用AWS託管服務,他們只爲1.5.6提供支持。當我運行相同的代碼時,我得到一個http 400錯誤的請求。如何通過1.5.6的多個標準(一個或多個)過濾結果的效果如何?

回答

1

如果您承諾使用多個match查詢,那麼您需要將它們與bool查詢結合使用。試試這個:

{ 
    "query":{  <--- use query here instead of filter 
     "bool":{ 
     "should":[ 
      { 
       "match":{ 
        "categories":"16310211" 
       } 
      }, 
      { 
       "match":{ 
        "categories":"493964" 
       } 
      } 
     ] 
     } 
    }, 
    "size":25, 
    "from":0 
} 

但是,通常match查詢用於進行全文搜索。它看起來好像你的「類別」是確切的值。我建議使用term過濾器來代替這種類型的數據。您可能對以下方面有更好的體驗:

{ 
    "query":{ 
    "filtered":{ 
     "filter":{ 
     "bool":{ 
      "should":[ 
      { "term":{"categories":"16310211"} }, 
      { "term":{"categories":"493964"} } 
      ] 
     } 
     } 
    } 
    }, 
    "size":25, 
    "from":0 
}