zoukankan      html  css  js  c++  java
  • elasticsearch 自定义similarity 插件开发

     

    转自: http://www.chepoo.com/elasticsearch-similarity-custom-plug-in-development.html

    在搜索开发中,我们要修改打分机制,就需要自定义similarity。现在来简单说一下elasticsearch下的自定义similarity 插件开发。

    网上的 https://github.com/tlrx/elasticsearch-custom-similarity-provider 仅仅支持0.20.0.Beta1-SNAPSHOT版本,现在我们用的版本是elasticsearch 0.90版本以上。那个例子现在不能用,我修改了一下。

    1.继承DefaultSimilarity,实现自己的搜索打分机制。

    package org.elasticsearch.index.similarity;
     
    import org.apache.lucene.search.similarities.DefaultSimilarity;
     
    /**
     * Custom similarity class
     * 
     * @author xq
     *
     */
    public class CustomSimilarity extends DefaultSimilarity {
     
      @Override
      public float idf(long docFreq, long numDocs) {
        return 1.0f;
      }
     
    }

    2.继续AbstractSimilarityProvider,把自定义的打分机制类加载到elasticsearch中。

    package org.elasticsearch.index.similarity;
     
    import org.elasticsearch.common.inject.Inject;
    import org.elasticsearch.common.inject.assistedinject.Assisted;
    import org.elasticsearch.common.settings.Settings;
     
    /**
     * Simple {@link SimilarityProvider} for a {@link CustomSimilarity}
     * 
     * @author xq
     *
     */
    public class CustomSimilarityProvider extends AbstractSimilarityProvider {
     
      private CustomSimilarity similarity;
     
      @Inject
      public CustomSimilarityProvider(@Assisted String name, @Assisted Settings settings) {
        super(name);
        this.similarity = new CustomSimilarity();
      }
     
     
     
      public CustomSimilarity get() {
        return similarity;
      }
    }

    3.继承AbstractPlugin作为elasticsearch插件使用

    public class CustomerSimilarityPlugin extends AbstractPlugin {
     
      @Override public String name() {
        return "customer-similarity";
      }
     
     
      @Override public String description() {
        return "customer similarity";
      }
     
     
      @Override public void processModule(Module module) {
        if (module instanceof SimilarityModule) {
          SimilarityModule similarityModule = (SimilarityModule) module;
          similarityModule.addSimilarity("customer-similarity", CustomSimilarityProvider.class);
        }
      }
    }

    4.使用

    curl -XPOST 'http://host:port/tweeter/' -d '
    {
      "settings": {
        "similarity": {
          "index": {
            "type": "org.elasticsearch.index.similarity.CustomSimilarityProvider"
          },
          "search": {
            "type": "org.elasticsearch.index.similarity.CustomSimilarityProvider"
          }
        }
      }
    }'

    在创建mapping的使用自定义的打分规则:

    {
      "news" : {
        "properties" : {
          "title" : { "type" : "string", "similarity" : "my_similarity" }
        }
    }

    在elasticsearch.yml中配置自定义的打分规则类为默认规则。 index.similarity.default.type: my_similarity

  • 相关阅读:
    [POJ1743]Musical Theme
    [HDU5343]MZL's Circle Zhou
    [ZJOI2015]诸神眷顾的幻想乡
    [SDOI2016]生成魔咒
    [POI2000]Repetitions
    [SPOJ-NSUBSTR]Substrings
    [SPOJ-LCS2]Longest Common Substring II
    [SPOJ-LCS]Longest Common Substring
    [SDOI2010]地精部落
    [HNOI2003]消防局的设立
  • 原文地址:https://www.cnblogs.com/bmaker/p/5731296.html
Copyright © 2011-2022 走看看