How can I keep track of each users disliked items and exclude them from the result in an efficient way


#1

Hi

I have a question about how a specific use case should be modelled in ElasticSearch.

I have an application where users can search for recommendations with several parameters and like/dislike each returned recommendation item. As it is now, recommendations that the user previously has disliked might show up again. So the question is; How can I keep track of each users disliked recommendations and exclude them from the result in an efficient way?

So if user1 search for recommendations and the result is:
rec1, rec2, rec3, rec4, rec5

If user1 then dislikes rec1 and rec2, and does the same search again, the result should be:
rec3, rec4, rec5

I’m aware that the search params should then contain the searching user’s id, and that some kind of user disliked recommendation list should be maintained in elastic search, but is that efficient enough if the application gains a large user base with many recommendation dislikes?

I've also created the question on stackoverflow: http://stackoverflow.com/questions/31087806/how-can-i-keep-track-of-each-users-disliked-items-and-exclude-them-from-the-resu


(Jason Wee) #2

with a not filter? https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-not-filter.html


(Mark Harwood) #3

Large lists of exclude terms can be stored - see https://www.elastic.co/blog/terms-filter-lookup


#4

Thank you for answering.

Would this terms filter lookup work for let's say thousands of terms and not just up to 1000. What if I had 10.000-50.000 terms and they were added continuously?

Would a parent/child relationsship be better then and which solution would have the best performance?


(system) #5