Κοινή χρήση τεχνολογίας

Elasticsearch προσαρμοσμένη βαθμολόγηση και σενάριο βαθμολογίας

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Στο Elasticsearch, ο προεπιλεγμένος μηχανισμός βαθμολόγησης (όπως ο αλγόριθμος BM25) μπορεί να παρέχει καλή κατάταξη των αποτελεσμάτων αναζήτησης στις περισσότερες περιπτώσεις. Ωστόσο, σε ορισμένα συγκεκριμένα σενάρια, μπορεί να χρειαστεί να εκτελέσουμε μια πιο εκλεπτυσμένη ταξινόμηση των αποτελεσμάτων αναζήτησης με βάση τις επιχειρηματικές ανάγκες. Αυτή τη στιγμή, το Elasticsearch παρέχει λειτουργίες προσαρμοσμένης βαθμολόγησης (Ερώτημα βαθμολογίας συνάρτησης) και βαθμολόγησης σεναρίου (Βαθμολογία σεναρίου) για την κάλυψη αυτών των πολύπλοκων αναγκών. Αυτό το άρθρο θα αναφέρει λεπτομερώς πώς να προσαρμόσετε τη βαθμολογία και τη βαθμολογία σεναρίου στο Elasticsearch.

1. Προσαρμοσμένη βαθμολογία (Ερώτημα βαθμολογίας συνάρτησης)

1.1 Ορισμός και Αρχή

Η προσαρμοσμένη βαθμολογία μας επιτρέπει να τροποποιήσουμε την προεπιλεγμένη βαθμολογία για κάθε έγγραφο με βάση ένα σύνολο προκαθορισμένων συναρτήσεων. Αυτές οι συναρτήσεις μπορούν να υπολογίσουν νέες αξιολογήσεις με βάση τις τιμές πεδίων του εγγράφου, τα κριτήρια ερωτήματος ή άλλους παράγοντες. Τελικά, το Elasticsearch θα συνδυάσει την αρχική βαθμολογία με την προσαρμοσμένη βαθμολογία για να καθορίσει την κατάταξη των αποτελεσμάτων αναζήτησης.

1.2 Κοινές λειτουργίες

Το Elasticsearch παρέχει μια ποικιλία από ενσωματωμένες λειτουργίες για προσαρμοσμένη βαθμολόγηση, συμπεριλαμβανομένων ενδεικτικά:

  • βάρος: Εκχωρήστε ένα ομοιόμορφο βάρος σε όλα τα έγγραφα που ταιριάζουν.
  • συντελεστής_τιμής_πεδίου: Υπολογίστε την αξιολόγηση με βάση τις τιμές πεδίων στο έγγραφο.
  • τυχαία_βαθμολογία: Δημιουργήστε μια τυχαία βαθμολογία για το έγγραφο.
  • decay_function: Υπολογίστε τη βαθμολογία εξασθένησης με βάση την απόσταση μεταξύ του εγγράφου και ενός συγκεκριμένου σημείου (όπως γεωγραφική θέση, χρόνος, κ.λπ.).
  • script_score: Χρησιμοποιήστε προσαρμοσμένα σενάρια για να υπολογίσετε τις βαθμολογίες.

1.3 Παράδειγμα

Ας υποθέσουμε ότι έχουμε έναν ιστότοπο ηλεκτρονικού εμπορίου και οι χρήστες θέλουν να λάβουν υπόψη τόσο την τιμή του προϊόντος όσο και τις αξιολογήσεις κατά την αναζήτηση προϊόντων.μπορούμε να χρησιμοποιήσουμεfunction_scoreΕρώτημα για την επίτευξη αυτής της απαίτησης:

GET /products/_search
{
  "query": {
    "function_score": {
      "query": {
        "match": {
          "name": "手机"
        }
      },
      "functions": [
        {
          "field_value_factor": {
            "field": "price",
            "modifier": "reciprocal",
            "params": {
              "scale": 100
            }
          }
        },
        {
          "field_value_factor": {
            "field": "rating",
            "missing": 1.0
          }
        }
      ],
      "score_mode": "sum",
      "boost_mode": "replace"
    }
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

Σε αυτό το παράδειγμα χρησιμοποιούμεfield_value_factor Η συνάρτηση υπολογίζει μια προσαρμοσμένη βαθμολογία με βάση την τιμή και τη βαθμολογία του αντικειμένου. Οι τιμές χρησιμοποιούν αμοιβαία αποσύνθεση (reciprocal ), έτσι ώστε το προϊόν με χαμηλότερη τιμή να έχει υψηλότερη βαθμολογία η βαθμολογία χρησιμοποιεί απευθείας την τιμή του πεδίου. Τέλος, προσθέτουμε τις αξιολογήσεις και των δύο λειτουργιών και αντικαθιστούμε τις αρχικές αξιολογήσεις.

2. Βαθμολογία σεναρίου

2.1 Ορισμός και Αρχή

Η βαθμολογία σεναρίου μας επιτρέπει να χρησιμοποιήσουμε μια προσαρμοσμένη γλώσσα δέσμης ενεργειών (όπως το Painless) για να υπολογίσουμε τη βαθμολογία ενός εγγράφου. Αυτή η προσέγγιση παρέχει τη μεγαλύτερη ευελιξία και μπορεί να υπολογίσει τις βαθμολογίες με βάση σχεδόν οποιαδήποτε λογική.

2.2 Παράδειγμα

Ας υποθέσουμε ότι θέλουμε να προσαρμόσουμε την αξιολόγηση με βάση την ποσότητα αποθέματος του προϊόντος Τα προϊόντα με μικρότερο απόθεμα θα έχουν υψηλότερες βαθμολογίες.μπορούμε να χρησιμοποιήσουμεscript_scoreλειτουργία για την επίτευξη αυτής της απαίτησης:

GET /products/_search
{
  "query": {
    "function_score": {
      "query": {
        "match": {
          "name": "手机"
        }
      },
      "functions": [
        {
          "script_score": {
            "script": {
              "source": "Math.max(0, 1 - doc['stock'].value / 100.0)",
              "lang": "painless"
            }
          }
        }
      ],
      "score_mode": "multiply",
      "boost_mode": "replace"
    }
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

Σε αυτό το παράδειγμα, χρησιμοποιούμε τη γλώσσα δέσμης ενεργειών Painless για τον υπολογισμό της βαθμολογίας. Το σενάριο καθορίζει την ποσότητα αποθέματος του προϊόντος (doc['stock'].value ) υπολογίζει μια βαθμολογία Όσο μεγαλύτερη είναι η ποσότητα του αποθέματος, τόσο μικρότερη είναι η ποσότητα του αποθέματος. Στη συνέχεια, πολλαπλασιάζουμε αυτή τη βαθμολογία με την αρχική βαθμολογία για να προσαρμόσουμε την τελική κατάταξη των αποτελεσμάτων αναζήτησης.

3. Περίληψη

Η προσαρμοσμένη βαθμολογία και η βαθμολογία σεναρίου είναι ισχυρές δυνατότητες που παρέχονται από το Elasticsearch, οι οποίες μας επιτρέπουν να βελτιώσουμε τα αποτελέσματα αναζήτησης με βάση τις επιχειρηματικές ανάγκες. Χρησιμοποιώντας ορθολογικά αυτές τις λειτουργίες, μπορούμε να βελτιώσουμε την εμπειρία χρήστη και να ανταποκριθούμε στις διαφορετικές ανάγκες των χρηστών. Ωστόσο, θα πρέπει να σημειωθεί ότι η προσαρμοσμένη βαθμολογία και η βαθμολογία σεναρίου μπορεί να αυξήσουν την πολυπλοκότητα των ερωτημάτων και το υπολογιστικό κόστος, επομένως τα πλεονεκτήματα και τα μειονεκτήματα πρέπει να σταθμίζονται σε πρακτικές εφαρμογές και να χρησιμοποιούνται με προσοχή.