2013-12-12 117 views
1

我正在嘗試使用以下查詢運行ElasticSearch搜索。請原諒我的無知,因爲我是ES新手,而且我試着按照文檔試驗和錯誤的方法拼湊起來。基本上,按照預期工作的唯一部分是來自,尺寸,排序以及嚴重程度的匹配。預先感謝您的協助!ElasticSearch不返回預期結果

{ 
    "from":0, 
    "size":50, 
    "sort":{"timestamp":{"order":"desc"}}, 
    "query":[ 
     { 
     "range":{ 
      "timestamp":{"gte":"2013-11-18T05:00:00+00:00","lte":"2013-12-02T05:00:00+00:00"} 
     } 
     }, 
     { 
     "query":{ 
      "match":{"severity":{"query":"medium","operator":"or"}} 
     } 
     }, 
     { 
     "query":{ 
      "constantScore":{ 
      "filter":{ 
       "query":{ 
       "query_string":{"default_field":"_all","query":"10.1.10.22"} 
       } 
      } 
      } 
     } 
     } 
    ] 
} 
+0

您的問題沒有足夠的詳細信息。你的數據是什麼?你想做什麼?你在期待什麼?你回來了什麼?包括這些樣本;最好包括插入數據示例的請求。 –

+0

對不起,缺乏細節。我的目標是根據用戶的輸入返回數據。用戶將提供開始/結束日期,嚴重程度(低,中,高)和搜索關鍵字。我正在收到結果,但未按照我預期的方式進行過濾。看來所有的日期範圍都被返回,以及結果沒有被query_string查詢中的字符串過濾。 – SpacePope

+0

您需要閱讀ES的查詢DSL才能編寫正確的查詢。你查詢是完全錯誤的。在你的情況下,你需要一個查詢來查詢「搜索關鍵字」,以及一些過濾器來過濾「開始/結束」,「服務器」。兩者都可以在搜索請求中執行。 –

回答

2

我認爲您需要詳細瞭解Query DSL。下面是根據你輸入正確的查詢:

{ 
    "query": { 
    "query_string": { 
     "default_field": "_all", 
     "query": "10.1.10.22" 
    } 
    }, 
    "filter": { 
    "bool": { 
     "must": [ 
     { 
      "range": { 
      "timestamp": { 
       "gte": "2013-11-18T05:00:00+00:00", 
       "lte": "2013-12-02T05:00:00+00:00" 
      } 
      } 
     }, 
     { 
      "term": { 
      "severity": "medium" 
      } 
     } 
     ] 
    } 
    } 
} 

上面的查詢可以作爲解釋: - 過濾數據首先使用布爾過濾器「必須」在這裏可以理解爲「AND」。因此,數據將按照「範圍內的時間戳...」和「服務器=中等」過濾 - 然後使用「query_string」搜索已過濾的數據。這將使您的搜索速度更快。

+0

德 - 非常感謝。這真的讓我走上正軌。我不清楚這一點,但用戶可以選擇多個嚴重性。因此,用戶可以提交「中」和「低」作爲他們想要搜索的嚴重性。我將您的「詞語」過濾器更改爲: '{「match」:{「severity」:{「query」:「medium low」,「operator」:「or」}}}' 請原諒格式化我似乎無法讓它看起來正確。但正如你所看到的,我試圖使用「匹配」過濾器而不是「術語」。我收到以下錯誤: 沒有篩選註冊[match]]; 最後一次幫助?謝謝! – SpacePope

+0

我剛剛引用了文檔,我在查看錯誤的部分 - 過濾器沒有「匹配」查詢。因此,我試圖使用「應該」過濾器: '「應該」:[{「term」:{「severity」:「medium」}},{「term」:{「severity」:「low」} }]' 但是,有了這個,我得到了'解析失敗[元素[term]的解析器]]];'任何線索? – SpacePope

+0

最後更新。我在「布爾」之外有「應該」過濾器。我把它搬到裏面,一切都很好。謝謝Duc。投票給你,如果可以的話,我會做兩次! – SpacePope