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

Πρότυπα αναζήτησης Elasticsearch: επαναχρησιμοποίηση και κοινή χρήση ερωτημάτων

2024-07-12

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

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

1. Γιατί να χρησιμοποιήσετε πρότυπα αναζήτησης

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

2. Εισαγωγική περίπτωση προτύπου αναζήτησης

2.1 Τυπικό έντυπο

Η βασική μορφή του προτύπου αναζήτησης είναι να ορίσει ένα αντικείμενο JSON που περιέχει συνθήκες ερωτήματος και πάσο_search/template Κλήσεις API. Για παράδειγμα:

GET /index_name/_search/template
{
  "source": {
    "query": {
      "match": {
        "remark": "{{kw}}"
      }
    },
    "size": "{{size}}"
  },
  "params": {
    "kw": "真正的数值",
    "size": 100
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

Σε αυτό το παράδειγμα,{{kw}}και{{size}}είναι μια μεταβλητή στο πρότυπο, πέρασεparamsΤα αντικείμενα περνούν συγκεκριμένες τιμές.

2.2 σε μορφή JSON

toJSONΗ μορφή χαρακτηρίζεται απόsource Χρησιμοποιήστε συμβολοσειρές για να ορίσετε και απαιτούνται χαρακτήρες διαφυγής. Για παράδειγμα:

GET cars/_search/template
{
  "source": "{ "query": { "match": {{#toJson}}parameter{{/toJson}} }}",
  "params": {
    "parameter": {
      "remark": "真正的数值"
    }
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

2.3 Διαβίβαση παραμέτρων στη μέθοδο σύνδεσης

χρήσηjoin Η μέθοδος μπορεί να συνενώσει τα στοιχεία του πίνακα σε μια συμβολοσειρά για συνθήκες ερωτήματος. Για παράδειγμα:

GET index_name/_search/template
{
  "source": {
    "query": {
      "match": {
        "remark": "{{#join delimiter=' '}}kw{{/join delimiter=' '}}"
      }
    }
  },
  "params": {
    "kw": ["大众", "标致", "奔驰", "宝马"]
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

2.4 Φόρμα προεπιλεγμένης τιμής

Μπορείτε να ορίσετε προεπιλεγμένες τιμές για τις παραμέτρους στο πρότυπο Εάν η παράμετρος δεν μεταβιβαστεί κατά την κλήση, θα χρησιμοποιηθεί η προεπιλεγμένη τιμή. Για παράδειγμα:

GET index_name/_search/template
{
  "source": {
    "query": {
      "range": {
        "price": {
          "gte": "{{start}}",
          "lte": "{{end}}{{^end}}200000{{/end}}"
        }
      }
    }
  },
  "params": {
    "start": 100000
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

3. Απομνημονεύστε το πρότυπο και πραγματοποιήστε επαναλαμβανόμενες κλήσεις

3.1 Πρότυπο αποθήκευσης Elasticsearch

Για να επαναχρησιμοποιήσουμε το πρότυπο, μπορούμε να το αποθηκεύσουμε στο Elasticsearch. Καθορίζοντας το όνομα του προτύπου, είναι βολικό να το καλείτε επανειλημμένα αργότερα. Για παράδειγμα:

POST _scripts/my_test_template
{
  "script": {
    "lang": "mustache",
    "source": {
      "query": {
        "match": {
          "field_name": "{{kw}}"
        }
      }
    }
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

3.2 Πρότυπο κλήσης

Όταν καλείτε το πρότυπο, περάστεid Για να καθορίσετε ένα συγκεκριμένο πρότυπο και να περάσετε τις αντίστοιχες παραμέτρους. Για παράδειγμα:

GET index_name/_search/template
{
  "id": "my_test_template",
  "params": {
    "kw": "自定义template的参数值"
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

3.3 Ερώτηση για το καθορισμένο πρότυπο

Μπορείτε να αναζητήσετε πληροφορίες για καθορισμένα πρότυπα μέσω αιτημάτων GET, για παράδειγμα:

GET _scripts/my_test_template
  • 1

3.4 Διαγράψτε ένα καθορισμένο πρότυπο

Εάν πρέπει να διαγράψετε ένα καθορισμένο πρότυπο, μπορείτε να χρησιμοποιήσετε ένα αίτημα DELETE, για παράδειγμα:

DELETE _scripts/my_test_template
  • 1

4. Προηγμένη εφαρμογή προτύπων αναζήτησης

4.1 Πρότυπο επαλήθευσης

Το Elasticsearch παρέχει_render/template API για την επικύρωση του προτύπου.