2016-04-18 7 views
0

Mein Ziel ist es, Filmempfehlungen System zu bauen.Elastische Film Empfehlung basierend auf Benutzer likes

Ich habe 2 Arten:

myMovies

Beispieldokument:

{ 
    "_index": "mymovies", 
    "_type": "mymovie", 
    "_id": "1", 
    "_score": 1, 
    "_source": { 
    "title" : "Funny title is here" 
    "genre" : "Comedy" 
    "movieViews" : 901142 
    } 
} 

Benutzer

Beispieldokument:

{ 
    "Name" : "Doni de brun", 
    "moviesLiked": [122,185,231,292,1]  
} 

Erste Frage: Wie können die Genres für jeden Film eines Benutzers extrahiert werden?

Zweite Frage: Ich habe viel über Aggregationen, signifikante Begriffe und Scoring gelesen, aber immer noch bin ich ein wenig verwirrt wann wann was zu verwenden.

Ich realisiere, dass der Aufbau eines effizienten Empfehlungssystems hängt von meinen Bedürfnissen ab, aber immer noch: Sollte ich die Genres extrahieren, und dann nach Genre und den meisten MovieViews suchen? Oder vielleicht custom_scoring für diese Art von System?

Antwort

0

Beginnen wir mit der Beantwortung Ihrer spezifischen Fragen zur Verwendung von Elasticsearch.

  1. Um an Daten zu gelangen, die in einem Feld in Ihrem Index verschachtelt sind, müssen Sie Nested Query verwenden. In diesem Fall wird das Feld "genre" in einem verborgenen Dokument indiziert, auf das Sie ohne die verschachtelte Abfrage nicht zugreifen können. Es funktioniert ähnlich wie andere Abfragetypen, sollte also ziemlich einfach zu erlernen und zu verwenden sein.
  2. Mithilfe von Aggregationen können Sie Ihre Suchergebnisse in nützliche Buckets einfügen. Jeder Aggregationstyp konzentriert sich auf einen anderen Aspekt der zurückgegebenen Ergebnisse, um diese Buckets zu erstellen. Ein gültiger Anwendungsfall für Sie wäre die Rückgabe aller Filme im Index und die Verwendung einer Aggregation, um die Filme nach Genre, Laufzeit, Schauspieler, Bewertung usw. zu gruppieren. Ich hatte großen Erfolg mit Aggregationen als Teil eines Filtertools. Ein Benutzer klickt auf einen der zurückgegebenen Buckets und sieht nur die darin enthaltenen Elemente. Dabei werden alle übrigen Ergebnisse herausgefiltert.
+0

danke dafür, das klarer zu machen. Kannst du meine erste Frage mit einer verschachtelten Abfrage beantworten? – ohadinho

+0

in Bezug auf dieses Beispiel aus elastischen docs: GET/my_index/Blogpost/_search { "Abfrage": { "Bool": { "Muss": [ { "Spiel": { "title": "Eier" }}, { "verschachtelt": { "Pfad": "Kommentare", "Abfrage": { "Bool": { "must": [{ "match": { "comments.name" : "john"}}, { "match": { "comments.age": 28}} ] }}}} ] }}} In meinem Fall, Blick auf "Pfad", wie ich "STEP OUT" zu MyMovies Index? – ohadinho

+0

Ich bin ein wenig verwirrt von Ihrer Frage hier. Was meinst du mit "treten" in den mymovies index?Wenn Sie diese Abfrage für diesen Index ausführen, gibt es kein "Aussteigen". Ihre verschachtelten Felder befinden sich immer noch in demselben Index. Sie befinden sich nur in einem Dokument, das vor den Suchergebnissen verborgen ist, es sei denn, Sie verwenden die Abfrage '' 'nested''' wie Sie. Um nach verschachtelten und nicht verschachtelten Feldern zu suchen, tun Sie Folgendes: '' '" query ": {" bool ": {" muss ": [" match ": {" topField ":" a "}, {" nested ": .. }, {"anotherTopLevelField": "b"} ... '' 'Dadurch werden Ergebnisse zurückgegeben, die zwei Feldern der obersten Ebene und allen in der verschachtelten Abfrage enthaltenen Feldern entsprechen. –

Verwandte Themen