2016-08-02 8 views
2

Wenn ich Random_score in der Abfrage verwenden, fand ich, dass es kostet 150 Millisekunden, um das Abfrageergebnis zu erhalten (wenn nicht Random_score verwenden, dauert es etwa 250 Millisekunden, um das Ergebnis zu erhalten).Elasticsearch mit Random_score verringert die Leistung

ursprüngliche Abfrage

{ 
"size": 10, 
"query": { 
    "function_score": { 
     "query": { 
      "bool": { 
       "must": [ 
        { 
         "query_string": { 
          "fields": [ 
           "sound_title", 
           "album_title" 
          ], 
          "query": "0" 
         } 
        } 
       ] 
      } 
     }, 
     "functions": [ 
      { 
       "filter": { 
        "bool": { 
         "must": [ 
          { 
           "term": { 
            "sound_chapters": 1 
           } 
          } 
         ] 
        } 
       }, 
       "weight": 1.2 
      }, 
      { 
       "field_value_factor": { 
        "field": "album_playcount", 
        "modifier": "log", 
        "missing": "100" 
       } 
      } 
     ], 
     "score_mode": "sum" 
     } 
    } 
} 

Abfrage mit random_score

{ 
"size": 10, 
"query": { 
    "function_score": { 
     "query": { 
      "bool": { 
       "must": [ 
        { 
         "query_string": { 
          "fields": [ 
           "sound_title", 
           "album_title" 
          ], 
          "query": "0" 
         } 
        } 
       ] 
      } 
     }, 
     "functions": [ 
      { 
       "filter": { 
        "bool": { 
         "must": [ 
          { 
           "term": { 
            "sound_chapters": 1 
           } 
          } 
         ] 
        } 
       }, 
       "weight": 1.2 
      }, 
      { 
       "field_value_factor": { 
        "field": "album_playcount", 
        "modifier": "log", 
        "missing": "100" 
       } 
      }, 
      { 
       "random_score": { 
        "seed": "123" 
       } 
      } 
     ], 
     "score_mode": "sum" 
     } 
    } 
} 

gibt es eine Möglichkeit, die Abfrage zu optimieren bessere Leistung zu verbessern?

Antwort

3

Wenn Sie einer beliebigen ElasticSearch Abfrage eine weitere Funktion hinzufügen, würde ES eine gewisse Verarbeitungszeit benötigen, um die Punktzahl dieser Funktion in die Hauptzahlung aufzunehmen, wodurch die Gesamtzeit erhöht wird. Sie können mehr über Random Scoring in elasticsearch here lesen.

Die häufigste Methode zum Erhöhen der Abfrageleistung besteht darin, filters anstelle von query zu verwenden, da Filter zwischengespeichert werden. Aber es sollte getan werden, wenn Sie genügend Speicher in Ihrem Server haben.

Sie können weitere Ideen aus dem Blog here erhalten.

+0

thx, aber ich verstehe einfach nicht, warum die Leistung so stark sinken kann (von etwa 250ms auf etwa 400ms). Meines Erachtens fügt random_score nur eine zufällige Punktzahl zwischen 0 und 1 zur Hauptzahlung hinzu, und im Allgemeinen ist die Generierung einer Zufallszahl kein zeitaufwändiger Prozess, so dass es nur wenig mehr Zeit braucht, um die random_score -Funktionsbewertung einzubeziehen Hauptzahl. –

+0

@ ThidtcWh ist, weil Random Scoring nicht rein zufällig ist. es ist "konsequent zufälliges" Scoring, was bedeutet, dass Sie für denselben Benutzer dieselben zufälligen Werte erhalten. Diese Art von Aktivität wird Zeit benötigen, um Daten pro Benutzer zu speichern und abzurufen. Ich habe Link für zufällige Scoring in meiner Antwort hinzugefügt, sollten Sie lesen, dass mindestens einmal dann werden Sie besser verstehen, die Verwendung von 'seed.' –

+0

Vielen Dank für Ihre Patienten zu beantworten, jetzt habe ich ein besseres Verständnis von Random_score Prozess –

Verwandte Themen