转自: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

相关程序已经放在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. 纯css3加载动画

    <!DOCTYPE html><html> <head> <meta charset="utf-8"> <meta name= ...

  2. (2.15)Mysql之SQL基础——开发设计最佳规范

    (2.15)Mysql之SQL基础——开发设计最佳规范 关键字:mysql三大范式,mysql sql开发规范 分析: show profile.mysqllsla.mysqldrmpslow.exp ...

  3. Python---1. 基础数据类型

    转载:  Py西游攻关之基础数据类型

  4. 2006 - MySQL server has gone away

    mysql出现ERROR : (2006, 'MySQL server has gone away') 的问题意思就是指client和MySQL server之间的链接断开了. 造成这样的原因一般是s ...

  5. [转]AJAX 跨源 HTTP 请求

    转自OSChina, 原文: http://www.oschina.net/translate/ajax-cross-origin-http-request 背景 跨源HTTP请求(也称跨域AJAX请 ...

  6. (28)Cocos2d-x xml解析

    Cocos2d-x 已经加入了tinyxml2用于xml的解析.3.0版本位于external/tinyxml2下.2.x版本位于cocos2dx/support/tinyxml2下. tinyxml ...

  7. hdu5091 线段树

    题意: 给了n个点在平面中 n<10000  然后 将这给了一个 宽为W 高为 H 的 矩形, 然后 使得这个矩形可以 涵盖最多的点有多少个,然后矩形的宽平行x 轴高平行y轴.可以将该矩形 水平 ...

  8. cocos2dx 3.x 拼图小游戏

    .h #define IMAGE_MAX 2 //图片的个数.. //图片结构体 属性 struct IMAGE_DATA { cocos2d::Sprite *m_pImage; bool m_bO ...

  9. React 函数传参

    import React, { Component } from 'react'; import { render } from 'react-dom'; class GroceryList exte ...

  10. 20145118 《Java程序设计》 实验报告一

    实验一 JAVA开发环境的熟悉(LINUX + ECLIPSE) 实验内容 1.使用JDK编译.运行简单的Java程序: 2.使用Eclipse 编辑.编译.运行.调试Java程序. 3.统计自己的P ...