1. 程式人生 > >ElasticSearch 圖片搜尋外掛 (一)

ElasticSearch 圖片搜尋外掛 (一)


一, 關於ElasticSearch
ElasticSearch 是基於 Lucene 的分散式搜尋引擎。 雖然Lucene 從 版本6 開始內部使用了bkd樹使得多維搜尋問題得到顯著優化,但是 ElasticSearch 實際只在 numeric range 問題上使用了bkd樹。

二,官方的圖片搜尋外掛 
官方網頁地址: https://www.elastic.co/blog/found-getting-started-with-lire-and-elasticsearch

該專案年久失修,正式發行版本只支援到ElasticSearch 1.0.1 ,readme也不能正常使用,而官方網頁上介紹的上傳圖片是程式設計實現的,不利於嘗試。所以下面介紹的使用步驟也是我一點點摸索出來的。

1,下載 ElasticSearch 1.0.1, 解壓,cd到目錄,執行 ./bin/plugin -install com.github.kzwang/elasticsearch-image/1.2.0安裝外掛。

2,執行./bin/elasticsearch啟動伺服器。

3,建立節點——開啟cmd視窗,執行命令:

curl -XPOST 'https://localhost:9200/images' -d '{    "settings" : {        "number_of_shards" : 3    },    "mappings" :{    "image": {        "properties": {            "name": {                "type": "string"            },            "image": {                "type": "image",                "feature": {                    "CEDD": {                        "hash": "BIT_SAMPLING"                    },                    "JCD": {                        "hash": ["BIT_SAMPLING", "LSH"]                    },                    "FCTH": {}                }            }        }    }}}'


4,上傳圖片——執行命令:

curl -XPOST 'https://localhost:9200/images/image' -d '{ "name":"<圖片名字>", "image":"<圖片的base64編碼>"}'

其中<圖片名字>替換成圖片的名字。

其中<圖片的base64編碼>替換成某張圖片的base64編碼,網上有很多線上工具可以用,比如“http://base64image.org/”。

可以多上傳幾張圖片來測試搜尋效果。

5,搜尋——執行命令:

curl -XPOST 'https://localhost:9200/images/_search' -d '{"fields":["name"],"query":{"image":{"image":{"feature":"CEDD","image":"<要搜的圖片的base64編碼>","hash":"BIT_SAMPLING","limit":10}}}}'


其中<要搜的圖片的base64編碼>替換成要搜尋的那張圖片的base64編碼。

以上3/4/5步也可以不使用curl,藉助於ElasticSearch的另一個核心外掛head中的複合查詢介面與伺服器通訊。head的安裝命令是
./bin/elasticsearch-plugin install mobz/elasticsearch-head

上面幾步執行完就可以看到搜尋結果類似這張截圖:

三,官方的圖片搜尋外掛只支援到1.0.1,而ElasticSearch 版本目前已經到了6。網上已經有幾個支援ElasticSeach 5 以上版本的圖片搜尋外掛專案,比如這個基於tensorflow的https://github.com/tuan3w/visual_search。ES 版本5和6也有一些區別,ES 6中 script 需要繼承的類是 SearchScript。

四,使用 es 做相似圖片搜尋在速度上並不理想,總是要將所有文件做一個評分才能得出最相似的那個。