以下是這個功能的小Demo,你可以挑一個你想要的顏色,然後找找看跟這個顏色符合的照片,他的搜尋功能像是個樣子!

Splunk 6搜尋圖片時進行預先處理,因此不需要圖片索引沒有索引的成本,若要搜尋儲存在HDFS (Hadoop Distributed File System)上的圖片,最方便的做法是先預先將圖片的顏色和分布進行描述,最後Splunk會將搜尋的結果依照與指令的相關度排序傳回.
圖片搜尋的方法有以下三種:
- 預先處理
預先處理(The Preprocessor)是用Java客製化Hadoop Record Reader ,以下就是預先處理的作法:描述:比對搜尋圖片的顏色的分布範圍和象素
Code: {"colors" : [[[0.12, 4.34, 8.23, ...] ...] ...], "image":"/path"}
Code: {"colors" : [[[0.12, 4.34, 8.23, ...] ...] ...], "image":"/path"}
- Splunk 搜尋
第一次搜尋:search index=images | eval score=color1+color2+…+colorN | sort -score by image
然而,可能會發生一個狀況是,搜尋到的圖片的一個顏色與指令上的顏色積分是100%相符,但未必是我們要找的那個圖片,所以必須是將所有的顏色和積分計算出來,積分越高,圖片搜尋的正確率就會越高,因此必須將圖片的顏色分布做積分的分配才行.
因此搜尋的語法有可能會變成這樣:
Code:
search index=images AND colors
| spath path=colors{1}{1}{7} output=color17
| spath path=colors{1}{2}{8} output=color28
| eval score=(1 + color17)*(1 + color28)*1
| eval score_pct=if(2<2, score, 100*(log(score,3))/log(pow((floor(100/3))+1,3),3))
| stats sum(score_pct) as relevance by image, source
| sort -relevance
| spath path=colors{1}{1}{7} output=color17
| spath path=colors{1}{2}{8} output=color28
| eval score=(1 + color17)*(1 + color28)*1
| eval score_pct=if(2<2, score, 100*(log(score,3))/log(pow((floor(100/3))+1,3),3))
| stats sum(score_pct) as relevance by image, source
| sort -relevance
注意,改變搜尋指令時沒有用預先處理功能但這樣必須要寫Hadoop MapReduce,而如果你有注意到的話,剛剛上面那一段程式碼有一個[like if(2<2,...)].的程式,這是因為要快速與下面的Javascript界接
- Splunk 6 UI
- 建立儀表板(dashboard)
- 轉成 HTML/Javascript等語法
- 用HTML 和Javascript 寫程式
其他的搜尋案例
事實上其他的資料格式也可以利用相同的方式進行搜尋:
- Packet capture (pcap)
- 音樂檔案
- 聲音檔
- 影片檔
- 存在Hadoop 上既有的資料格式(檔案)
沒有留言:
張貼留言