# How to add custom similarity provider to ES v2.3?

**URL:** <https://discuss.elastic.co/t/how-to-add-custom-similarity-provider-to-es-v2-3/68246>\
**Category:** Elasticsearch\
**Created:** [December 7, 2016, 6:17am UTC](https://discuss.elastic.co/t/how-to-add-custom-similarity-provider-to-es-v2-3/68246 "2016-12-07T06:17:30Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![Jason\_Zhang](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/jason_zhang/32/745_2.png) [@Jason\_Zhang](https://discuss.elastic.co/u/Jason_Zhang)\
**Post date:** [December 7, 2016, 6:17am UTC](https://discuss.elastic.co/t/how-to-add-custom-similarity-provider-to-es-v2-3/68246/1 "2016-12-07T06:17:31Z")

</div>

I want to implement my custom similarity function based on TFIDF with the [codes](https://github.com/jasonzzz/elasticsearch-custom-similarity-provider/) forked from this [repo](https://github.com/tlrx/elasticsearch-custom-similarity-provider).

With `service elasticsearch restart`, the log prints out:

```
[2016-12-07 12:29:10,350][DEBUG][action.admin.indices.create] [node-chito] [test1] failed to create
[test1] IndexCreationException[failed to create index]; nested: IllegalArgumentException[Unknown Similarity type [org.elasticsearch.index.similarity.CustomSimilarityProvider] for [index]];
    at org.elasticsearch.indices.IndicesService.createIndex(IndicesService.java:362)
    at org.elasticsearch.cluster.metadata.MetaDataCreateIndexService$1.execute(MetaDataCreateIndexService.java:309)
    at org.elasticsearch.cluster.ClusterStateUpdateTask.execute(ClusterStateUpdateTask.java:45)
    at org.elasticsearch.cluster.service.InternalClusterService.runTasksForExecutor(InternalClusterService.java:468)
    at org.elasticsearch.cluster.service.InternalClusterService$UpdateTask.run(InternalClusterService.java:772)
    at org.elasticsearch.common.util.concurrent.PrioritizedEsThreadPoolExecutor$TieBreakingPrioritizedRunnable.runAndClean(PrioritizedEsThreadPoolExecutor.java:231)
    at org.elasticsearch.common.util.concurrent.PrioritizedEsThreadPoolExecutor$TieBreakingPrioritizedRunnable.run(PrioritizedEsThreadPoolExecutor.java:194)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.IllegalArgumentException: Unknown Similarity type [org.elasticsearch.index.similarity.CustomSimilarityProvider] for [index]
    at org.elasticsearch.index.similarity.SimilarityModule.configure(SimilarityModule.java:82)
    at org.elasticsearch.common.inject.AbstractModule.configure(AbstractModule.java:60)
    at org.elasticsearch.common.inject.spi.Elements$RecordingBinder.install(Elements.java:233)
    at org.elasticsearch.common.inject.spi.Elements.getElements(Elements.java:105)
    at org.elasticsearch.common.inject.InjectorShell$Builder.build(InjectorShell.java:143)
    at org.elasticsearch.common.inject.InjectorBuilder.build(InjectorBuilder.java:99)
    at org.elasticsearch.common.inject.InjectorImpl.createChildInjector(InjectorImpl.java:157)
    at org.elasticsearch.common.inject.ModulesBuilder.createChildInjector(ModulesBuilder.java:55)
    at org.elasticsearch.indices.IndicesService.createIndex(IndicesService.java:358)
    ... 9 more

```

I'm wondering if I can add custom similarity provider like ES v1.x since `SimilarityModule.configure()` differs between [v1.3](https://github.com/elastic/elasticsearch/blob/1.3/src/main/java/org/elasticsearch/index/similarity/SimilarityModule.java#L71) and [v2.3](https://github.com/elastic/elasticsearch/blob/2.3/core/src/main/java/org/elasticsearch/index/similarity/SimilarityModule.java#L81).  
Also on ES v5.x [there](https://github.com/elastic/elasticsearch/blob/5.x/core/src/main/java/org/elasticsearch/index/similarity/SimilarityService.java#L45)'s only SimilarityService.java instead of SimilarityModule.java.

How to add custom similarity prodvider for ES v2.x and v5.x?  
Is it possible to add it by using plugin?  
Or maybe I misunderstand something?

Thank you in advance.

---

<div class="post-metadata">

**Author:** ![sdauletau](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/sdauletau/32/24779_2.png) [@sdauletau](https://discuss.elastic.co/u/sdauletau)\
**Post date:** [December 29, 2016, 4:06am UTC](https://discuss.elastic.co/t/how-to-add-custom-similarity-provider-to-es-v2-3/68246/2 "2016-12-29T04:06:39Z")

</div>

I have an example and description at [https://github.com/sdauletau/elasticsearch-position-similarity/blob/master/Advanced%20Scoring%20with%20Elasticsearch%20Similarity%20Plugins.md](https://github.com/sdauletau/elasticsearch-position-similarity/blob/master/Advanced%20Scoring%20with%20Elasticsearch%20Similarity%20Plugins.md).

---

<div class="post-metadata">

**Author:** ![Jason\_Zhang](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/jason_zhang/32/745_2.png) [@Jason\_Zhang](https://discuss.elastic.co/u/Jason_Zhang)\
**Post date:** [December 29, 2016, 4:21am UTC](https://discuss.elastic.co/t/how-to-add-custom-similarity-provider-to-es-v2-3/68246/3 "2016-12-29T04:21:23Z")

</div>

Thank you, I've already turned to use plugin to implement custom similarity function.

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/elastic/original/3X/1/a/1ac57faf039f6b580b3f104ef42a2a89e41014de.png) [@system](https://discuss.elastic.co/u/system)\
**Post date:** [January 26, 2017, 4:21am UTC](https://discuss.elastic.co/t/how-to-add-custom-similarity-provider-to-es-v2-3/68246/4 "2017-01-26T04:21:32Z")

</div>

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.
