Similar image search by pHash distance in Elasticsearch

后端 未结 7 1525
悲哀的现实
悲哀的现实 2020-12-07 10:51

Similar image search problem

  • Millions of images pHash\'ed and stored in Elasticsearch.
  • Format is \"11001101...11\" (length 64), but can be changed (
7条回答
  •  隐瞒了意图╮
    2020-12-07 11:18

    I have used @ndtreviv's answer as a starting point. Here are my notes for ElasticSearch 2.3.3:

    1. es-plugin.properties file is now called plugin-descriptor.properties

    2. You do not reference NativeScriptFactory in elasticsearch.yml, instead you create an additional class next to your HammingDistanceScript.


    import org.elasticsearch.common.Nullable;
    import org.elasticsearch.plugins.Plugin;
    import org.elasticsearch.script.ExecutableScript;
    import org.elasticsearch.script.NativeScriptFactory;
    import org.elasticsearch.script.ScriptModule;
    
    import java.util.Map;
    
    public class StringMetricsPlugin extends Plugin {
        @Override
        public String name() {
            return "string-metrics";
        }
    
        @Override
        public  String description() {
            return "";
        }
    
        public void onModule(ScriptModule module) {
            module.registerScript("hamming-distance", HammingDistanceScriptFactory.class);
        }
    
        public static class HammingDistanceScriptFactory implements NativeScriptFactory {
            @Override
            public ExecutableScript newScript(@Nullable Map params) {
                return new HammingDistanceScript(params);
            }
            @Override
            public boolean needsScores() {
                return false;
            }
        }
    }
    
    1. Then reference this class in your plugin-descriptor.properties file:

    plugin=com.example.elasticsearch.plugins. StringMetricsPlugin
    name=string-metrics
    version=0.1.0
    jvm=true
    classname=com.example.elasticsearch.plugins.StringMetricsPlugin
    java.version=1.8
    elasticsearch.version=2.3.3
    
    1. You query by supplying the name you used in this line: module.registerScript("hamming-distance", HammingDistanceScriptFactory.class); in 2.

    Hope this helps the next poor soul that has to deal with the shitty ES docs.

提交回复
热议问题