一, 关于ElasticSearch
ElasticSearch 是基于 Lucene 的分布式搜索引擎。 虽然Lucene 从 版本6 开始内部使用了bkd树使得多维搜索问题得到显著优化,但是 ElasticSearch 实际只在 numeric range 问题上使用了bkd树。
二,官方的图片搜索插件
官方网页地址: https://www.elastic.co/blog/foun ... e-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 做相似图片搜索在速度上并不理想,总是要将所有文档做一个评分才能得出最相似的那个。
【转载】https://blog.csdn.net/imliutao2/article/details/78915480
|