在搜索开发中,我们要修改打分机制,就需要自定义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 自定义评分插件开发 文本相似度
本教程将围绕“elasticsearch自定义分词插件”这一主题展开,通过分析一个简单的空格分词插件实例,帮助你理解如何编写自己的分词插件。 首先,我们需要了解Elasticsearch插件的基本结构。Elasticsearch插件分为两...
es-head是一个针对Elasticsearch的可视化操作插件。它提供了一个便捷的操作工具,可以连接Elasticsearch搜索引擎,并提供可视化的操作页面,对Elasticsearch进行各种设置和数据检索功能的管理。 es-head 插件可以在...
深入研究这个代码,我们可以了解其内部工作原理,如何集成到Elasticsearch中,以及如何自定义嵌入向量模型和相似度计算方法。 总结来说,这个插件结合了Python的灵活性和Elasticsearch的高性能,利用机器学习的嵌入...
标题 "基于hanlp的elasticsearch分词插件" 指的是将自然语言处理库HanLP与搜索引擎Elasticsearch相结合,开发出一个用于Elasticsearch的分词插件。这样的插件可以提升Elasticsearch在中文文本处理上的性能,使其能够...
此插件包含一个可在索引中使用的自定义Similarity类: curl -XPOST 'http://host:port/tweeter/' -d ' { "settings": { "similarity": { "index": { "type": "org.elasticsearch.index.similarity....
在安装IK插件时,需要将这个jar文件放入Elasticsearch的plugins目录下,并重启ES服务。 `plugin-security.policy`是插件的安全策略文件,用于限制插件的权限,防止不安全的操作。`plugin-descriptor.properties`是...
为了便于管理和操作Elasticsearch集群,开发者们开发了各种可视化工具,其中“Elasticsearch Head”就是一款非常实用的插件,它专为谷歌浏览器设计,提供了一个直观的用户界面,让用户能够轻松监控和管理Elastic...
Elasticsearch-Head 是一款专为谷歌Chrome浏览器设计的开源插件,主要用于方便地管理和查看Elasticsearch(ES)集群的状态和数据。这款插件提供了一个直观的图形用户界面(GUI),使得用户无需编写复杂的查询语句,...
"es-head"是Elasticsearch-head的简写,它允许用户无需编写复杂的curl命令就能与Elasticsearch进行交互。通过这个插件,你可以查看索引的状态,监控节点健康状况,查看集群统计信息,甚至进行索引的创建、删除和映射...
**Elasticsearch 1.5.2 with Head 插件** Elasticsearch 是一个高度可扩展的开源全文搜索引擎,设计用于处理大量数据并提供实时分析。它基于 Lucene 库,但提供了更高级别的分布式、容错和索引管理功能。在1.5.2...
Elasticsearch-head插件是一个基于Grunt(JavaScript任务运行器)开发的Web应用,它提供了一个简洁、直观的用户界面,使用户能够轻松地查看集群状态、索引信息、文档数据以及执行RESTful请求。这个插件的设计理念是...
Elasticsearch Header 是一个专为 Elasticsearch 客户端设计的插件,它基于 Node.js 运行,旨在增强和扩展ES客户端的功能,特别是对于用户界面和交互方面提供了更丰富的头部信息支持。在本文中,我们将深入探讨该...
"es浏览器插件chrome插件" 这个标题表明我们要讨论的是一个用于Elasticsearch(简称ES)的Chrome浏览器扩展程序,它可能是为了方便用户在Chrome浏览器上直观地管理和操作Elasticsearch集群。描述中的内容与标题相同...
自定义了es6分词插件,其中分词逻辑已被封装到接口中,接收文本,调用接口,输出分词结果 参考文章:https://blog.csdn.net/frankcheng5143/article/details/82870319
4. **节省资源**:作为独立的Web应用,Head插件不会占用Elasticsearch服务器的资源,避免了直接安装在ES上的潜在问题。 **二、使用Elasticsearch-Head谷歌插件** 1. **安装与配置**:由于是谷歌插件,用户可以通过...
多弹性搜索头,对著名的 Elasticsearch Head 的改进 1.保存和存储几个Elasticsearch端点 2.索引选项卡中的更多列 3. 任何请求现在都可以像 /_cat/indices 一样处理 JSON 返回 4. 更简约的外观(更小的字体等...) ...
安装此插件到Elasticsearch中,用户可以自定义同义词库,例如通过JSON格式的配置文件,将同义词组定义为映射关系。在索引文档时,插件会自动处理这些同义词,确保在查询时能够正确匹配。此外,动态同义词插件可能还...
Elasticsearch(ES)是一种流行的开源全文搜索引擎,它基于Lucene构建,提供了分布式、RESTful风格的搜索和分析引擎服务。在中文环境下,为了实现精确的分词和搜索,我们需要安装适合版本的分词插件,如“elastic...