ELK查詢指令-類似where的搜索條件-文字搜索-前處理
前言 ELK對文字的處理方式分成兩種 使用分析器分析 不進行分析 可藉由改變欄位的類型讓ELK跳過文字分析的動作,這會改變搜索的方法 而預設中文分析後,全部沒有空白的中文字會是一個 token 第一種,使用分析器分析 ELK對文字(Text類型)會進行底下的動作,做完後塞到elasticsearch資料庫內 移除大部分的符號 把剩餘的文字切割成一個一個的字,這些字有個特殊的名字叫做 token 把 token 變成小寫 會進行這些動作是為了全文搜索,這也是elasticsearch的優點之一 通常透由 logstash 輸入的文字欄位都是 text,除非有特別寫一份template指定欄位類型 例如輸入的文字是 POST myindex/_doc { "message": "He is your friend, trust me." } 會先把符號拿掉 He friend trust me 分割成字 [He, your, friend, trust, me] 變成小寫 [he, your, friend, trust, me] 上面五個字就是 token,在進行文字搜索時,只要比對到一個token就算比對成功 is 這類型的字會被分析器過濾掉,因為它們是 stop token 筆者不是文字分析師,對此表達不懂,大概就是介係詞會被移除掉 這邊有被移除的英文字清單 如果想要保留 is 這類的英文字,這邊 官方文章 有說明 現在elasticsearch有中文分析器 _cjk_,筆者還沒用過 要搜索到上面的文字只要找到其中一個token就好 GET myindex/_search { "query": { "match": { "message": "me" } } } 第二種,不進行分析 (Keyword) 將資料型態變為 keyword,可以停止elasticsearch對特定欄位進行分析 常用在 email、地址、主機名稱、序號等,整串文字放在一起才有意義 也可以把數字變成 k