`
m635674608
  • 浏览: 5041468 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

elasticsearch 自定义similarity 插件开发

 
阅读更多

在搜索开发中,我们要修改打分机制,就需要自定义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/

 

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

分享到:
评论

相关推荐

    Elasticsearch5.5.1 自定义评分插件开发 文本相似度

    Elasticsearch5.5.1 自定义评分插件开发 文本相似度Elasticsearch5.5.1 自定义评分插件开发 文本相似度Elasticsearch5.5.1 自定义评分插件开发 文本相似度

    elasticsearch自定义分词插件

    本教程将围绕“elasticsearch自定义分词插件”这一主题展开,通过分析一个简单的空格分词插件实例,帮助你理解如何编写自己的分词插件。 首先,我们需要了解Elasticsearch插件的基本结构。Elasticsearch插件分为两...

    es-head Elasticsearch的可视化操作插件

    es-head是一个针对Elasticsearch的可视化操作插件。它提供了一个便捷的操作工具,可以连接Elasticsearch搜索引擎,并提供可视化的操作页面,对Elasticsearch进行各种设置和数据检索功能的管理。 es-head 插件可以在...

    Python-Elasticsearch的高效嵌入向量相似打分插件

    深入研究这个代码,我们可以了解其内部工作原理,如何集成到Elasticsearch中,以及如何自定义嵌入向量模型和相似度计算方法。 总结来说,这个插件结合了Python的灵活性和Elasticsearch的高性能,利用机器学习的嵌入...

    基于hanlp的elasticsearch分词插件

    标题 "基于hanlp的elasticsearch分词插件" 指的是将自然语言处理库HanLP与搜索引擎Elasticsearch相结合,开发出一个用于Elasticsearch的分词插件。这样的插件可以提升Elasticsearch在中文文本处理上的性能,使其能够...

    elasticsearch-custom-similarity-provider:Elasticsearch的自定义SametimeProvider示例

    此插件包含一个可在索引中使用的自定义Similarity类: curl -XPOST 'http://host:port/tweeter/' -d ' { "settings": { "similarity": { "index": { "type": "org.elasticsearch.index.similarity....

    elasticsearch ik插件

    在安装IK插件时,需要将这个jar文件放入Elasticsearch的plugins目录下,并重启ES服务。 `plugin-security.policy`是插件的安全策略文件,用于限制插件的权限,防止不安全的操作。`plugin-descriptor.properties`是...

    谷歌浏览器elasticsearch head插件

    为了便于管理和操作Elasticsearch集群,开发者们开发了各种可视化工具,其中“Elasticsearch Head”就是一款非常实用的插件,它专为谷歌浏览器设计,提供了一个直观的用户界面,让用户能够轻松监控和管理Elastic...

    elasticsearch-head插件

    Elasticsearch-Head 是一款专为谷歌Chrome浏览器设计的开源插件,主要用于方便地管理和查看Elasticsearch(ES)集群的状态和数据。这款插件提供了一个直观的图形用户界面(GUI),使得用户无需编写复杂的查询语句,...

    Elasticsearch-head谷歌插件谷歌插件.zip

    "es-head"是Elasticsearch-head的简写,它允许用户无需编写复杂的curl命令就能与Elasticsearch进行交互。通过这个插件,你可以查看索引的状态,监控节点健康状况,查看集群统计信息,甚至进行索引的创建、删除和映射...

    elasticsearch1.5.2带head插件

    **Elasticsearch 1.5.2 with Head 插件** Elasticsearch 是一个高度可扩展的开源全文搜索引擎,设计用于处理大量数据并提供实时分析。它基于 Lucene 库,但提供了更高级别的分布式、容错和索引管理功能。在1.5.2...

    ElasticSearch-head插件

    Elasticsearch-head插件是一个基于Grunt(JavaScript任务运行器)开发的Web应用,它提供了一个简洁、直观的用户界面,使用户能够轻松地查看集群状态、索引信息、文档数据以及执行RESTful请求。这个插件的设计理念是...

    elasticsearch-header插件

    Elasticsearch Header 是一个专为 Elasticsearch 客户端设计的插件,它基于 Node.js 运行,旨在增强和扩展ES客户端的功能,特别是对于用户界面和交互方面提供了更丰富的头部信息支持。在本文中,我们将深入探讨该...

    es浏览器插件chrome插件

    "es浏览器插件chrome插件" 这个标题表明我们要讨论的是一个用于Elasticsearch(简称ES)的Chrome浏览器扩展程序,它可能是为了方便用户在Chrome浏览器上直观地管理和操作Elasticsearch集群。描述中的内容与标题相同...

    elasticsearch6.x自定义分词插件

    自定义了es6分词插件,其中分词逻辑已被封装到接口中,接收文本,调用接口,输出分词结果 参考文章:https://blog.csdn.net/frankcheng5143/article/details/82870319

    elasticsearch-head谷歌插件

    4. **节省资源**:作为独立的Web应用,Head插件不会占用Elasticsearch服务器的资源,避免了直接安装在ES上的潜在问题。 **二、使用Elasticsearch-Head谷歌插件** 1. **安装与配置**:由于是谷歌插件,用户可以通过...

    ES客户端+谷歌浏览器插件+Multi-Elasticsearch-Head

    多弹性搜索头,对著名的 Elasticsearch Head 的改进 1.保存和存储几个Elasticsearch端点 2.索引选项卡中的更多列 3. 任何请求现在都可以像 /_cat/indices 一样处理 JSON 返回 4. 更简约的外观(更小的字体等...) ...

    ES同义词插件 elasticsearch-analysis-dynamic-synonym-6.5.1.rar

    安装此插件到Elasticsearch中,用户可以自定义同义词库,例如通过JSON格式的配置文件,将同义词组定义为映射关系。在索引文档时,插件会自动处理这些同义词,确保在查询时能够正确匹配。此外,动态同义词插件可能还...

    elasticSearch(ES)最新版 ik分词插件7.10 elasticsearch-analysis-ik-7.10.0

    Elasticsearch(ES)是一种流行的开源全文搜索引擎,它基于Lucene构建,提供了分布式、RESTful风格的搜索和分析引擎服务。在中文环境下,为了实现精确的分词和搜索,我们需要安装适合版本的分词插件,如“elastic...

Global site tag (gtag.js) - Google Analytics