转自: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,实现自己的搜索打分机制。

  1. package org.elasticsearch.index.similarity;
  2.  
  3. import org.apache.lucene.search.similarities.DefaultSimilarity;
  4.  
  5. /**
  6. * Custom similarity class
  7. *
  8. * @author xq
  9. *
  10. */
  11. public class CustomSimilarity extends DefaultSimilarity {
  12.  
  13. @Override
  14. public float idf(long docFreq, long numDocs) {
  15. return 1.0f;
  16. }
  17.  
  18. }

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

  1. package org.elasticsearch.index.similarity;
  2.  
  3. import org.elasticsearch.common.inject.Inject;
  4. import org.elasticsearch.common.inject.assistedinject.Assisted;
  5. import org.elasticsearch.common.settings.Settings;
  6.  
  7. /**
  8. * Simple {@link SimilarityProvider} for a {@link CustomSimilarity}
  9. *
  10. * @author xq
  11. *
  12. */
  13. public class CustomSimilarityProvider extends AbstractSimilarityProvider {
  14.  
  15. private CustomSimilarity similarity;
  16.  
  17. @Inject
  18. public CustomSimilarityProvider(@Assisted String name, @Assisted Settings settings) {
  19. super(name);
  20. this.similarity = new CustomSimilarity();
  21. }
  22.  
  23. public CustomSimilarity get() {
  24. return similarity;
  25. }
  26. }

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

  1. public class CustomerSimilarityPlugin extends AbstractPlugin {
  2.  
  3. @Override public String name() {
  4. return "customer-similarity";
  5. }
  6.  
  7. @Override public String description() {
  8. return "customer similarity";
  9. }
  10.  
  11. @Override public void processModule(Module module) {
  12. if (module instanceof SimilarityModule) {
  13. SimilarityModule similarityModule = (SimilarityModule) module;
  14. similarityModule.addSimilarity("customer-similarity", CustomSimilarityProvider.class);
  15. }
  16. }
  17. }

4.使用

  1. curl -XPOST 'http://host:port/tweeter/' -d '
  2. {
  3. "settings": {
  4. "similarity": {
  5. "index": {
  6. "type": "org.elasticsearch.index.similarity.CustomSimilarityProvider"
  7. },
  8. "search": {
  9. "type": "org.elasticsearch.index.similarity.CustomSimilarityProvider"
  10. }
  11. }
  12. }
  13. }'

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

  1. {
  2. "news" : {
  3. "properties" : {
  4. "title" : { "type" : "string", "similarity" : "my_similarity" }
  5. }
  6. }

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

相关程序已经放在https://github.com/awnuxkjy/es-custom-similarity-provider,有兴趣的朋友可以参考一下。

把程序打成jar包放在elasticsearch 的plugins 下的 similarity 目录下即可 参考文章: http://www.elasticsearch.org/guide/reference/index-modules/similarity/

elasticsearch 自定义similarity 插件开发的更多相关文章

  1. elasticsearch 自定义_id

    elasticsearch 自定义ID: curl -s -XPUT localhost:9200/web -d ' { "mappings": { "blog" ...

  2. JMeter自定义采样器插件开发

    JMeter自定义采样器插件开发 目录 JMeter自定义采样器插件开发 1. 简介 2. 需求简介 3.成品展示 成功展示 失败展示 4. 准备开发环境 4.1 准备pom文件 4.2 新建Java ...

  3. Elasticsearch 自定义多个分析器

    分析器(Analyzer) Elasticsearch 无论是内置分析器还是自定义分析器,都由三部分组成:字符过滤器(Character Filters).分词器(Tokenizer).词元过滤器(T ...

  4. Elasticsearch 自定义映射

    尽管在很多情况下基本域数据类型 已经够用,但你经常需要为单独域自定义映射 ,特别是字符串域.自定义映射允许你执行下面的操作: 全文字符串域和精确值字符串域的区别 使用特定语言分析器 优化域以适应部分匹 ...

  5. ElasticSearch自定义分析器-集成结巴分词插件

    关于结巴分词 ElasticSearch 插件: https://github.com/huaban/elasticsearch-analysis-jieba 该插件由huaban开发.支持Elast ...

  6. Elasticsearch自定义分析器

    关于分析器 ES中默认使用的是标准分析器(standard analyzer).如果需要对某个字段使用其他分析器,可以在映射中该字段下说明.例如: PUT /my_index { "mapp ...

  7. elasticsearch自定义动态映射

    https://www.elastic.co/guide/cn/elasticsearch/guide/current/custom-dynamic-mapping.html如果你想在运行时增加新的字 ...

  8. ElasticSearch——自定义模板

    output中配置 elasticsearch{ action => "index" hosts => ["xxx"] index => &q ...

  9. ElasticSearch 自定义排序处理

    使用function_score进行分组处理,利用分组函数script_score进行自定义分值处理, 注意:使用script功能需要在配置中打开脚本功能: script.inline: on   s ...

随机推荐

  1. mysql查询乱码解决方法

    http://blog.csdn.net/u012408083/article/details/52734762 MySQL 命令行查询乱码 编码问题 当使用数据库工具查询数据时显示数据正常,中文也很 ...

  2. Codeforces Round #265 (Div. 2) E

    这题说的是给了数字的字符串 然后有n种的操作没次将一个数字替换成另一个字符串,求出最后形成的字符串的 数字是多大,我们可以逆向的将每个数推出来,计算出他的值和位数记住位数用10的k次方来记 1位就是1 ...

  3. js正则表达式的使用详解

    本文转自:http://www.jb51.net/article/39623.htm 1定义正则表达式2关于验证的三个这则表达式方法3正则表达式式的转义字符 1定义正则表达式在js中定义正则表达式很简 ...

  4. JAVA面试题整理(7)-Redis

    Redis面试题汇总 1.Redis用过哪些类型数据,以及Redis底层怎么实现 分析:是不是觉得这个问题很基础,其实我也这么觉得.然而根据面试经验发现,至少百分八十的人答不上这个问题.建议,在项目中 ...

  5. 对OpenCV中3种乘法操作的理解掌握

    参考了<Opencv中Mat矩阵相乘——点乘.dot.mul运算详解 >“http://blog.csdn.net/dcrmg/article/details/52404580”的相关内容 ...

  6. linux及安全第五周总结——20135227黄晓妍

    (注意:本文总结备份中有较多我手写笔记的图片,其中重要的部分打出来了.本文对分析system_call对应的汇编代码的工作过程,系统调用处理过程”的理解,以及流程图都写在实验部分.) 实验部分 使用g ...

  7. FromBottomToTop第十三周项目博客

    FromBottomToTop第十三周项目博客 本周项目计划 完成游戏核心算法以及界面相关类和怪物类 项目进展 用户可选择游戏模式,共有20张不同的地图. 炮台的建立和升级. 小怪的路径算法. 参考资 ...

  8. linux下查看当前登陆的用户数目

    在shell下输入以下语句即可获取: who | awk '{print $1}' | sort | uniq | wc -l

  9. 日志自定义Tag

    import java.util.concurrent.ConcurrentMap; import java.util.concurrent.ConcurrentHashMap; /** * Crea ...

  10. 寻找List之和的最近素数

    Task : Given a List [] of n integers , find minimum mumber to be inserted in a list, so that sum of ...