Elasticsearch SQL Translate API

Elasticsearch Sql Translate Api



Σε αυτήν την ανάρτηση, θα μάθουμε πώς να μεταφράσουμε μια αναζήτηση SQL σε ένα έγκυρο αίτημα API αναζήτησης Elasticsearch που περιέχει πλήρη Γλώσσα συγκεκριμένης περιοχής ερωτήματος που βασίζεται σε JSON.

Αν και αυτό είναι ένα μικρό API, είναι ένα πολύ ωφέλιμο εργαλείο, ειδικά για προγραμματιστές που προέρχονται από βάσεις δεδομένων SQL. Μπορεί επίσης να μειώσει την καμπύλη εκμάθησης συνδέοντας γρήγορα τα ερωτήματα SQL με τα αντίστοιχα ερωτήματα αναζήτησης.

Στη συνέχεια, μπορείτε να εξερευνήσετε τις πλήρεις δυνατότητες του API αναζήτησης Elasticsearch και τις υποστηριζόμενες γλώσσες ερωτημάτων.







Πρέπει να έχετε κατά νου ότι παρόλο που το Elasticsearch υποστηρίζει SQL, περιέχει διάφορους περιορισμούς.



Σύνταξη ερωτήματος

Το παρακάτω δείχνει τη σύνταξη του API μετάφρασης:



GET _sql/translate

{

request_body

}

Μπορείτε επίσης να στείλετε ένα αίτημα ανάρτησης στο API μετάφρασης όπως φαίνεται στην ακόλουθη σύνταξη:





POST _sql/translate

{

request_body

}

Ανάλογα με τη διαμόρφωση του συμπλέγματος σας, το API ενδέχεται να απαιτεί δικαιώματα ανάγνωσης στο ευρετήριο του οποίου τα δεδομένα θέλετε να υποβάλετε ερωτήματα. Μπορείτε επίσης να καθορίσετε τον πόρο προορισμού ως ψευδώνυμο ευρετηρίου ή ως ροή δεδομένων.

Στο request_body, μπορείτε να καθορίσετε όλες τις παραμέτρους σώματος αιτήματος API SQL Search. Εξερευνήστε τα έγγραφα που παρέχονται στον ακόλουθο πόρο για να μάθετε περισσότερα:



https://www.elastic.co/guide/en/elasticsearch/reference/current/sql-search-api.html#sql-search-api-request-body

Ως απάντηση, το ερώτημα θα πρέπει να επιστρέψει το αποτέλεσμα που αντιστοιχεί στο API αναζήτησης με τα ερωτηθέντα δεδομένα.

Παράδειγμα

Για να δείξουμε καλύτερα τον τρόπο χρήσης αυτού του API, θα υποθέσουμε ότι έχουμε ένα ευρετήριο που ονομάζεται 'netflix' που περιέχει όλα τα δεδομένα σχετικά με τις ταινίες και τις τηλεοπτικές εκπομπές του Netflix.

Ας υποθέσουμε ότι θέλουμε να φέρουμε τις πέντε κορυφαίες ταινίες από το ευρετήριο του Netflix που κυκλοφορήσαμε το έτος 2020 και άνω:

Το ισοδύναμο ερώτημα SQL μπορεί να εκφραστεί όπως φαίνεται παρακάτω:

ΕΠΙΛΕΞΤΕ τίτλο, διάρκεια, βαθμολογία, πληκτρολογήστε FROM netflix WHERE type = 'Ταινία' ΚΑΙ έτος_έκδοσης >= 2020

Για να εκτελέσουμε την παραπάνω αναζήτηση SQL στο Elasticsearch, μπορούμε να την βάλουμε στο SQL Search API όπως φαίνεται παρακάτω:

μπούκλα -XGET “http://localhost:9200/_sql?format=txt” 'kbn-xsrf: αναφορά' 'Τύπος περιεχομένου: εφαρμογή/json' -ρε '

{

'ερώτημα': ' \n ΕΠΙΛΟΓΗ τίτλου, διάρκεια, βαθμολογία, τύπος ΑΠΟ 'netflix' WHERE type = '
\ '' Ταινία ' \' ' ΚΑΙ έτος_έκδοσης >= 2020 \n ',

'
fetch_size ': 5

}'

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

Όπως μπορούμε να δούμε, το Elasticsearch επιστρέφει την αναμενόμενη έξοδο.

Για να επιστρέψουμε την έξοδο ως JSON, μπορούμε να ορίσουμε τη μορφή σε JSON όπως φαίνεται παρακάτω:

μπούκλα -XGET 'http://localhost:9200/_sql?format=json' 'kbn-xsrf: αναφορά' 'Τύπος περιεχομένου: εφαρμογή/json' -ρε '

{

'ερώτημα': ' \n ΕΠΙΛΟΓΗ τίτλου, διάρκεια, βαθμολογία, τύπος ΑΠΟ 'netflix' WHERE type = '
\ '' Ταινία ' \' ' ΚΑΙ έτος_έκδοσης >= 2020 \n ',

'
fetch_size ': 5

}'

Παραγωγή:

Μετατροπή ερωτήματος SQL σε αίτημα αναζήτησης

Για να μετατρέψουμε το προηγούμενο ερώτημα αναζήτησης SQL σε αίτημα Elasticsearch, μπορούμε να το περάσουμε στο translate API όπως φαίνεται παρακάτω:

μπούκλα -XGET 'http://localhost:9200/_sql/translate' 'kbn-xsrf: αναφορά' 'Τύπος περιεχομένου: εφαρμογή/json' -ρε '

{

'ερώτημα': ' \n ΕΠΙΛΟΓΗ τίτλου, διάρκεια, βαθμολογία, τύπος ΑΠΟ 'netflix' WHERE type = '
\ '' Ταινία ' \' ' ΚΑΙ έτος_έκδοσης >= 2020 \n ',

'
fetch_size ': 5

}'

Το API θα πρέπει να αναλύσει την είσοδο SQL και να τη μετατρέψει σε έγκυρο αίτημα αναζήτησης, όπως φαίνεται στην ακόλουθη έξοδο:

{
'Μέγεθος' : 5 ,
'ερώτηση' : {
'μπουλ' : {
'πρέπει' : [
{
'όρος' : {
'τύπος' : {
'αξία' : 'Ταινία'
}
}
},
{
'εύρος' : {
'έτος_έκδοσης' : {
'gte' : 2020 ,
'ώθηση' : 1
}
}
}
],
'ώθηση' : 1
}
},
'_πηγή' : ψεύτικο,
'χωράφια' : [
{
'πεδίο' : 'τίτλος'
},
{
'πεδίο' : 'διάρκεια'
},
{
'πεδίο' : 'εκτίμηση'
},
{
'πεδίο' : 'τύπος'
}
],
'είδος' : [
{
'_doc' : {
'Σειρά' : 'αύξηση'
}
}
]
}

Στη συνέχεια, μπορείτε να χρησιμοποιήσετε αυτήν τη μορφή αιτήματος για αποστολή στο API αναζήτησης Elasticsearch όπως φαίνεται παρακάτω:

μπούκλα -XPOST 'http://localhost:9200/netflix/_search' 'kbn-xsrf: αναφορά' 'Τύπος περιεχομένου: εφαρμογή/json' -ρε '
{
'μέγεθος': 5,
'ερώτημα': {
'bool': {
'πρέπει': [
{
'term': {
'type': {
'value': 'Ταινία'
}
}
},
{
'εύρος': {
'έτος_έκδοσης': {
'gte': 2020,
«ενίσχυση»: 1
}
}
}
],
«ενίσχυση»: 1
}
},
'_source': ψευδής,
'πεδία': [
{
'field': 'τίτλος'
},
{
'πεδίο': 'διάρκεια'
},
{
'field': 'βαθμολόγηση'
},
{
'field': 'type'
}
],
'είδος': [
{
'_doc': {
'παραγγελία': 'αύξηση'
}
}
]
}'

Ομοίως, το αίτημα θα πρέπει να επιστρέψει παρόμοια δεδομένα όπως φαίνεται παρακάτω:

συμπέρασμα

Μέσω αυτής της ανάρτησης, ανακαλύψατε πώς θα μπορούσατε να χρησιμοποιήσετε ερωτήματα SQL για να ανακτήσετε δεδομένα από ένα υπάρχον ευρετήριο Elasticsearch. Μάθατε επίσης πώς να χρησιμοποιείτε το translate SQL API για να μετατρέψετε ένα έγκυρο ερώτημα SQL σε αίτημα Elasticsearch.