# ClassCastException: Failed to load custom similarity plugin

**URL:** <https://discuss.elastic.co/t/classcastexception-failed-to-load-custom-similarity-plugin/61781>\
**Category:** Elasticsearch\
**Created:** [September 29, 2016, 7:44am UTC](https://discuss.elastic.co/t/classcastexception-failed-to-load-custom-similarity-plugin/61781 "2016-09-29T07:44:24Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![Moshe\_Sucaz](https://avatars.discourse-cdn.com/v4/letter/m/0ea827/32.png) [@Moshe\_Sucaz](https://discuss.elastic.co/u/Moshe_Sucaz)\
**Post date:** [September 29, 2016, 7:44am UTC](https://discuss.elastic.co/t/classcastexception-failed-to-load-custom-similarity-plugin/61781/1 "2016-09-29T07:44:24Z")

</div>

Hi,  
I wrote our own custom similarity plugin, installed it successfully, but when booting elastic I get:

> 2016-09-29 10:31:10.875044500 Exception in thread "main" java.lang.ClassCastException: class \>org.elasticsearch.index.similarity.LengthNormalizingSimilarityProvider  
> 2016-09-29 10:31:10.875412500 at java.lang.Class.asSubclass(Class.java:3404)  
> 2016-09-29 10:31:10.875414500 at org.elasticsearch.plugins.PluginsService.loadPluginClass(PluginsService.java:463)  
> 2016-09-29 10:31:10.875416500 at org.elasticsearch.plugins.PluginsService.loadBundles(PluginsService.java:431)  
> 2016-09-29 10:31:10.875417500 at org.elasticsearch.plugins.PluginsService.(PluginsService.java:129)  
> 2016-09-29 10:31:10.875419500 at org.elasticsearch.node.Node.(Node.java:158)  
> 2016-09-29 10:31:10.875550500 at org.elasticsearch.node.Node.(Node.java:140)  
> 2016-09-29 10:31:10.875552500 at org.elasticsearch.node.NodeBuilder.build(NodeBuilder.java:143)  
> 2016-09-29 10:31:10.875553500 at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:178)  
> 2016-09-29 10:31:10.875663500 at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:270)  
> 2016-09-29 10:31:10.875664500 at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:35)  
> 2016-09-29 10:31:10.875666500 Refer to the log for complete error details.

The plugin I wrote is:

> public class BuzzillaSimilarityPlugin extends Plugin {  
> @Override  
> public String name() {  
> return "buzzilla-similarity-plugin";  
> }  
> @Override  
> public String description() {  
> return "Implements similarity required by the Buzzilla search";  
> }  
> public void onModule(final SimilarityModule module) {  
> module.addSimilarity("buzzilla-similarity", LengthNormalizingSimilarityProvider.class);  
> }  
> }

The custom similarity is:

> public class LengthNormalizingSimilarityProvider extends AbstractSimilarityProvider {  
> private ClassicSimilarity similarity;  
> @Inject  
> public LengthNormalizingSimilarityProvider(@Assisted String name, @Assisted Settings settings) {  
> super(name);  
> this.similarity = new ClassicSimilarity() {  
> @Override  
> public float lengthNorm(FieldInvertState state) {  
> state.setLength(state.getLength() \< 15 ? 15 : state.getLength());  
> return super.lengthNorm(state);  
> }  
> };  
> }  
> @Override  
> public ClassicSimilarity get() {  
> return similarity;  
> }  
> }

and the plugin-descriptor.properties is:

> description=buzzill-similarity-plugin  
> name=buzzilla-similarity-plugin  
> jvm=true  
> java.version=1.8.0  
> elasticsearch.version=2.3.4  
> classname=org.elasticsearch.index.similarity.LengthNormalizingSimilarityProvider

What am I missing?

---

<div class="post-metadata">

**Author:** ![jprante](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/jprante/32/44941_2.png) [@jprante](https://discuss.elastic.co/u/jprante)\
**Post date:** [September 29, 2016, 9:27am UTC](https://discuss.elastic.co/t/classcastexception-failed-to-load-custom-similarity-plugin/61781/2 "2016-09-29T09:27:58Z")

</div>

> [@Moshe\_Sucaz](#):
>
> classname=org.elasticsearch.index.similarity.LengthNormalizingSimilarityProvider

Do not declare a similarity provider as a plugin class. Use

```auto
classname=[yourpackage].BuzzillaSimilarityPlugin

```

---

<div class="post-metadata">

**Author:** ![Moshe\_Sucaz](https://avatars.discourse-cdn.com/v4/letter/m/0ea827/32.png) [@Moshe\_Sucaz](https://discuss.elastic.co/u/Moshe_Sucaz)\
**Post date:** [September 29, 2016, 10:19am UTC](https://discuss.elastic.co/t/classcastexception-failed-to-load-custom-similarity-plugin/61781/3 "2016-09-29T10:19:33Z")

</div>

Thanks, it solved this issue and elastic boot with no errors, but now, when I try to index docs I get:

> 2016-09-29 12:46:04.653317500 java.lang.IllegalArgumentException: Unknown Similarity type [org.elasticsearch.index.similarity.LengthNormalizingSimilarityProvider] for [index]  
> 2016-09-29 12:46:04.653320500 at org.elasticsearch.index.similarity.SimilarityModule.configure(SimilarityModule.java:82)  
> 2016-09-29 12:46:04.653321500 at org.elasticsearch.common.inject.AbstractModule.configure(AbstractModule.java:60)  
> 2016-09-29 12:46:04.653321500 at org.elasticsearch.common.inject.spi.Elements$RecordingBinder.install(Elements.java:233)  
> 2016-09-29 12:46:04.653324500 at org.elasticsearch.common.inject.spi.Elements.getElements(Elements.java:105)  
> 2016-09-29 12:46:04.653325500 at org.elasticsearch.common.inject.InjectorShell$Builder.build(InjectorShell.java:143)  
> 2016-09-29 12:46:04.653325500 at org.elasticsearch.common.inject.InjectorBuilder.build(InjectorBuilder.java:99)  
> 2016-09-29 12:46:04.653326500 at org.elasticsearch.common.inject.InjectorImpl.createChildInjector(InjectorImpl.java:157)  
> 2016-09-29 12:46:04.653331500 at org.elasticsearch.common.inject.ModulesBuilder.createChildInjector(ModulesBuilder.java:55)  
> 2016-09-29 12:46:04.653331500 at org.elasticsearch.indices.IndicesService.createIndex(IndicesService.java:358)  
> 2016-09-29 12:46:04.653332500 at org.elasticsearch.cluster.metadata.MetaDataCreateIndexService$1.execute(MetaDataCreateIndexService.java:309)  
> 2016-09-29 12:46:04.653332500 at org.elasticsearch.cluster.ClusterStateUpdateTask.execute(ClusterStateUpdateTask.java:45)  
> 2016-09-29 12:46:04.653336500 at org.elasticsearch.cluster.service.InternalClusterService.runTasksForExecutor(InternalClusterService.java:468)  
> 2016-09-29 12:46:04.653337500 at org.elasticsearch.cluster.service.InternalClusterService$UpdateTask.run(InternalClusterService.java:772)  
> 2016-09-29 12:46:04.653337500 at org.elasticsearch.common.util.concurrent.PrioritizedEsThreadPoolExecutor$TieBreakingPrioritizedRunnable.runAndClean(PrioritizedEsThreadPoolExecutor.java:231)  
> 2016-09-29 12:46:04.653340500 at org.elasticsearch.common.util.concurrent.PrioritizedEsThreadPoolExecutor$TieBreakingPrioritizedRunnable.run(PrioritizedEsThreadPoolExecutor.java:194)  
> 2016-09-29 12:46:04.653341500 at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)  
> 2016-09-29 12:46:04.653346500 at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)  
> 2016-09-29 12:46:04.653347500 at java.lang.Thread.run(Thread.java:745)

in indexSettings I put:

> "similarity":{  
> "index":{  
> "type":"org.elasticsearch.index.similarity.LengthNormalizingSimilarityProvider"  
> },  
> "search":{  
> "type":"org.elasticsearch.index.similarity.LengthNormalizingSimilarityProvider"  
> }  
> }

How can I solve it, please?

---

<div class="post-metadata">

**Author:** ![Moshe\_Sucaz](https://avatars.discourse-cdn.com/v4/letter/m/0ea827/32.png) [@Moshe\_Sucaz](https://discuss.elastic.co/u/Moshe_Sucaz)\
**Post date:** [October 5, 2016, 5:25am UTC](https://discuss.elastic.co/t/classcastexception-failed-to-load-custom-similarity-plugin/61781/4 "2016-10-05T05:25:05Z")

</div>

Fixed after doing as described in  
[http://stefansavev.com/blog/custom-similarity-for-elasticsearch/](http://stefansavev.com/blog/custom-similarity-for-elasticsearch/)  
Thanks

---

<div class="post-metadata">

**Author:** ![krati](https://avatars.discourse-cdn.com/v4/letter/k/ac91a4/32.png) [@krati](https://discuss.elastic.co/u/krati)\
**Post date:** [November 24, 2016, 8:08am UTC](https://discuss.elastic.co/t/classcastexception-failed-to-load-custom-similarity-plugin/61781/5 "2016-11-24T08:08:00Z")

</div>

Hi Moshe,  
I am trying to deploy the custom similarity plugin given in the mentioned blog but getting the error as

{  
"error": {  
"root\_cause": [  
{  
"type": "index\_creation\_exception",  
"reason": "failed to create index"  
}  
],  
"type": "illegal\_argument\_exception",  
"reason": "Unknown Similarity type [overlapsimilarity] for [custom\_similarity]"  
},  
"status": 400  
}

I have followed all the steps mentioned in the blog but I guess I am missing something.  
Any idea what can be wrong here ? (I am using ES version 2.3.4)

---

<div class="post-metadata">

**Author:** ![Moshe\_Sucaz](https://avatars.discourse-cdn.com/v4/letter/m/0ea827/32.png) [@Moshe\_Sucaz](https://discuss.elastic.co/u/Moshe_Sucaz)\
**Post date:** [November 24, 2016, 3:04pm UTC](https://discuss.elastic.co/t/classcastexception-failed-to-load-custom-similarity-plugin/61781/6 "2016-11-24T15:04:47Z")

</div>

Hi Krati,  
I had a mismatch with files names and the similarity name.  
After reading the above post, I renamed the class names and their calls and it worked.

---

<div class="post-metadata">

**Author:** ![krati](https://avatars.discourse-cdn.com/v4/letter/k/ac91a4/32.png) [@krati](https://discuss.elastic.co/u/krati)\
**Post date:** [November 25, 2016, 7:19am UTC](https://discuss.elastic.co/t/classcastexception-failed-to-load-custom-similarity-plugin/61781/7 "2016-11-25T07:19:32Z")

</div>

Thanks Moshe for the quick help.  
I started again carefully, checking every minute detail and its working now. 🙂

---

<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:** [July 5, 2017, 10:05pm UTC](https://discuss.elastic.co/t/classcastexception-failed-to-load-custom-similarity-plugin/61781/8 "2017-07-05T22:05:27Z")

</div>


