# Using Elasticsearch as a recommendation engine

**URL:** <https://discuss.elastic.co/t/using-elasticsearch-as-a-recommendation-engine/37718>\
**Category:** Elasticsearch\
**Created:** [December 21, 2015, 8:03pm UTC](https://discuss.elastic.co/t/using-elasticsearch-as-a-recommendation-engine/37718 "2015-12-21T20:03:06Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![brunomiranda](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/brunomiranda/32/746_2.png) [@brunomiranda](https://discuss.elastic.co/u/brunomiranda)\
**Post date:** [December 21, 2015, 8:03pm UTC](https://discuss.elastic.co/t/using-elasticsearch-as-a-recommendation-engine/37718/1 "2015-12-21T20:03:06Z")

</div>

Does anybody have experience using Elasticsearch as a recommendation engine? I have several functions within a function\_score block to boost the score based on filters. More interestingly I am using field\_value\_factor (to alter score based on document values) and a gauss function achieve "the closer, the better" functionality. I was curious if this approach is the recommended approach. And any pointers.

---

<div class="post-metadata">

**Author:** ![ebuildy](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/ebuildy/32/6070_2.png) [@ebuildy](https://discuss.elastic.co/u/ebuildy)\
**Post date:** [December 21, 2015, 11:04pm UTC](https://discuss.elastic.co/t/using-elasticsearch-as-a-recommendation-engine/37718/2 "2015-12-21T23:04:22Z")

</div>

Usually recommendation means machine learning, what is your approach?

---

<div class="post-metadata">

**Author:** ![brunomiranda](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/brunomiranda/32/746_2.png) [@brunomiranda](https://discuss.elastic.co/u/brunomiranda)\
**Post date:** [December 21, 2015, 11:08pm UTC](https://discuss.elastic.co/t/using-elasticsearch-as-a-recommendation-engine/37718/3 "2015-12-21T23:08:40Z")

</div>

I have a basic set of rules that determined which documents would score higher than others. Example:

Say I am searching for articles posted by users within a social network.

1. Articles posted by my friends would boost the score of the document.
2. Articles posted by a friend of a friend would have a slightly lesser boost impact
3. Articles posted by someone near me would be the an even slightly lesser impact but one nonetheless.

The above is a simplify version of what I am doing. I use a terms filter using a list of my friend ids, friend of friends ids and a geo\_distance filter for the number 3.

Makes sense?

---

<div class="post-metadata">

**Author:** ![ebuildy](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/ebuildy/32/6070_2.png) [@ebuildy](https://discuss.elastic.co/u/ebuildy)\
**Post date:** [December 21, 2015, 11:15pm UTC](https://discuss.elastic.co/t/using-elasticsearch-as-a-recommendation-engine/37718/4 "2015-12-21T23:15:41Z")

</div>

Okay I see, yes it's a very good approach.

I think you can hack ES if you want to score by an external data source, instead of storing friend list. Or you could use Apache Spark for that (because its low latency).

Do you have mapping/document/queries examples somewhere ?

---

<div class="post-metadata">

**Author:** ![brunomiranda](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/brunomiranda/32/746_2.png) [@brunomiranda](https://discuss.elastic.co/u/brunomiranda)\
**Post date:** [December 21, 2015, 11:18pm UTC](https://discuss.elastic.co/t/using-elasticsearch-as-a-recommendation-engine/37718/5 "2015-12-21T23:18:12Z")

</div>

I don't yet, but I am using a [terms filter lookup](https://www.elastic.co/blog/terms-filter-lookup) to avoid sending large arrays of ids over HTTP.

---

<div class="post-metadata">

**Author:** ![Mark\_Harwood](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/mark_harwood/32/10538_2.png) [@Mark\_Harwood](https://discuss.elastic.co/u/Mark_Harwood)\
**Post date:** [December 22, 2015, 10:21am UTC](https://discuss.elastic.co/t/using-elasticsearch-as-a-recommendation-engine/37718/6 "2015-12-22T10:21:53Z")

</div>

Just curious - are you searching only via friend-of-friend type connections ("what is my social circle generally interested in?") or are you also testing properties of the docs e.g. free-text search on the contents ("find me docs on 'clubs' my friends like).

---

<div class="post-metadata">

**Author:** ![brunomiranda](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/brunomiranda/32/746_2.png) [@brunomiranda](https://discuss.elastic.co/u/brunomiranda)\
**Post date:** [December 22, 2015, 6:39pm UTC](https://discuss.elastic.co/t/using-elasticsearch-as-a-recommendation-engine/37718/7 "2015-12-22T18:39:04Z")

</div>

Hi Mark,

I am mostly using filters on the docs, ie.: find documents where some ID matches my query id. I may add so full-text search capabilities to it in the future. I have also used full-text search in conjunction with the function\_score mentioned above.

I've always wondering if other people are using it this way for purposes similar to mine.

---

<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, 11:29pm UTC](https://discuss.elastic.co/t/using-elasticsearch-as-a-recommendation-engine/37718/8 "2017-07-05T23:29:14Z")

</div>


