在搜索开发中,我们要修改打分机制,就需要自定义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
相关推荐
自定义elasticsearch分词插件,在网上找了一个空格分词的实现,主要看思路,方便大家写自己的分词插件
Elasticsearch5.5.1 自定义评分插件开发 文本相似度Elasticsearch5.5.1 自定义评分插件开发 文本相似度Elasticsearch5.5.1 自定义评分插件开发 文本相似度
此插件包含一个可在索引中使用的自定义Similarity类: curl -XPOST 'http://host:port/tweeter/' -d ' { "settings": { "similarity": { "index": { "type": "org.elasticsearch.index.similarity....
Score documents using embedding-vectors dot-product or cosine-similarity with ES Lucene engine
自定义了es6分词插件,其中分词逻辑已被封装到接口中,接收文本,调用接口,输出分词结果 参考文章:https://blog.csdn.net/frankcheng5143/article/details/82870319
谷歌浏览器elasticsearch head插件
elasticsearch ik插件,github速度比较慢,拉下来分享一下
基于hanlp的elasticsearch分词插件
elasticsearch-head插件,带有安装说明。
es搜索引擎框架
elasticsearch-head谷歌插件,有了这个插件,就不用去es里面安装head插件了,直接就可以使用,避免了安装head可能会遇到的问题
Elasticsearch-head谷歌插件,直接导入即可;目前是0.1.5_0版本,很好用; 大家可以试试。
Elasticsearch的自定义相似性 自定义相似性插件集成基于Tf-Idf相似性(就像DefaultSimilarity一样) 但是,有两个明显的变化: tf被丢弃,始终返回1.0f 默认情况下,此相似度不会将规范压缩到单个字节,因此字段...
elasticsearch-6.4.2 hanlp分词插件 windows下安装命令 首先进入es bin目录 elasticsearch-6.4.2\bin> 然后执行 elasticsearch-plugin.bat install file:///E:/elasticsearch-analysis-ik-6.4.2.zip Linux下安装...
ElasticSearch可视化界面的 head插件 实现基本信息的查看,rest请求的模拟,数据的检索等等
elasticsearch中文分词插件,解压至ES安装目录,如D:\works\elasticsearch-6.4.0\plugins\ik,注意,不用修改elasticsearch.yml,就可以直接使用了。
适用于Chrome的ES之Head插件
chrome浏览器的elasticsearch-head插件,用于连接阿里云的es,本地的elasticsearch-head连接不上阿里云的elasticsearch,不知道为什么,由于资源重复,我把rar文件和crx文件放在了一起打包,只有rar解压,之后chrome...
elasticsearch-2.2.0,已经安装elasticsearch-sql插件、elasticsearch-head插件、ik分词插件,windows、linux都可以使用
谷歌浏览器插件,可以省去安装elasticSearch的head插件烦恼,很方便