# Similarity plugin in ES \> 6

**URL:** <https://discuss.elastic.co/t/similarity-plugin-in-es-6/196814>\
**Category:** Elasticsearch\
**Created:** [August 26, 2019, 4:57pm UTC](https://discuss.elastic.co/t/similarity-plugin-in-es-6/196814 "2019-08-26T16:57:50Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![David\_G\_Ortega](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/david_g_ortega/32/46359_2.png) [@David\_G\_Ortega](https://discuss.elastic.co/u/David_G_Ortega)\
**Post date:** [August 26, 2019, 4:57pm UTC](https://discuss.elastic.co/t/similarity-plugin-in-es-6/196814/1 "2019-08-26T16:57:50Z")

</div>

Hi,

can someone point me how I could build a plugin that introduces a new Lucene similarity class?  
So I can then call

```auto
PUT /index
{
    "settings" : {
        "index" : {
            "similarity" : {
              "dssm" : {
                "type" : "dssm",
                "model" : "intent_optimized.pb"
              }
            }
        }
    }
}

```

```java
import org.apache.lucene.search.similarities.Similarity;

public class DSSM extends Similarity {
}

```

thanks in advance

---

<div class="post-metadata">

**Author:** ![rjernst](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/rjernst/32/6363_2.png) [@rjernst](https://discuss.elastic.co/u/rjernst)\
**Post date:** [August 26, 2019, 5:39pm UTC](https://discuss.elastic.co/t/similarity-plugin-in-es-6/196814/2 "2019-08-26T17:39:06Z")

</div>

Currently custom similarity implementations are added on a per index basis. In your plugin extend the `Plugin` class, and override the `onIndexModule` method. Then call `IndexModule.addSimilarity`.

---

<div class="post-metadata">

**Author:** ![David\_G\_Ortega](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/david_g_ortega/32/46359_2.png) [@David\_G\_Ortega](https://discuss.elastic.co/u/David_G_Ortega)\
**Post date:** [August 29, 2019, 8:37am UTC](https://discuss.elastic.co/t/similarity-plugin-in-es-6/196814/3 "2019-08-29T08:37:01Z")

</div>

@rjernst thanks for the support.  
I have done a simple test working perfectly

```java
indexModule.addSimilarity("BM25_CLONED", SimilarityService.BUILT_IN.get("BM25"));

```

I see that I have to set a Trifunction with parameters settings, version and scriptService. While settings seems to be accesible in plugin (actually not the same but a List of Setting ), not sure how access or generate version and scriptService.

Any direction to follow?

---

<div class="post-metadata">

**Author:** ![David\_G\_Ortega](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/david_g_ortega/32/46359_2.png) [@David\_G\_Ortega](https://discuss.elastic.co/u/David_G_Ortega)\
**Post date:** [August 29, 2019, 9:03am UTC](https://discuss.elastic.co/t/similarity-plugin-in-es-6/196814/4 "2019-08-29T09:03:44Z")

</div>

@rjernst I saw that it simply works.

```java
indexModule.addSimilarity("BM25_CLONED", (settings, version, scriptService) -> createBM25Similarity(settings, version, scriptService));

```

Thanks a lot for the support

---

<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:** [September 26, 2019, 9:03am UTC](https://discuss.elastic.co/t/similarity-plugin-in-es-6/196814/5 "2019-09-26T09:03:53Z")

</div>

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