Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Personalized Search Results for Elasticsearch

How would one go about setting up Elasticsearch so that it returns personalized results?

For example, I would want results returned to a particular user to rank higher if they clicked on a result previously, or if they "starred" that result in the past. You could also have a "hide" option that pushes results further down the ranking. From what I've seen with elasticsearch so far, it seems difficult to return different rankings to users based on that user's own dynamic data.

The solution would have to scale to thousands of users doing a dozen or so searches per day. Ideally, I would like the ranking to change in real-time, but it's not critical.

like image 695
speedplane Avatar asked Jan 23 '15 20:01

speedplane


People also ask

What is search API in Elasticsearch?

Elasticsearch provides search API, which is used for searching the data across indexes and all types. It helps to search the data in Elasticsearch by executing the search query and get back the search result matched with the query. This API enables you to search the data within Elasticsearch.

How do I search index in Elasticsearch?

You can use the search API to search and aggregate data stored in Elasticsearch data streams or indices. The API's query request body parameter accepts queries written in Query DSL. The following request searches my-index-000001 using a match query. This query matches documents with a user.id value of kimchy .

Is Elasticsearch a database or search engine?

Elasticsearch is a document oriented database. The entire object graph you want to search needs to be indexed, so before indexing your documents, they must be denormalized.

How does search in Elasticsearch work?

Elasticsearch uses a data structure called an inverted index, which is designed to allow very fast full-text searches. An inverted index lists every unique word that appears in any document and identifies all of the documents each word occurs in.


1 Answers

Elasticsearch provides a wide variety of scoring options , but then to achieve what you have told you will need to do some additional tasks.

Function score query and document terms lookup terms filter would be our tools of our choice

First create a document per user , telling the links or link ID he visited and the links he has liked. This should be housed separately as separate index. And this should be maintained by the user , as he should update and maintain this record from client side.

Now when a user hits the data index, do a function score query with filter function pointing to this fields.

In this approach , as the filter is cached , you should get decent performance too.

like image 114
Vineeth Mohan Avatar answered Sep 28 '22 06:09

Vineeth Mohan