Teknologian jakaminen

Elasticsearch-hakumallit: käytä uudelleen ja jaa kyselyitä

2024-07-12

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

Elasticsearchin (ES) päivittäisessä kehittämisessä ja käytössä kohtaamme usein skenaarioita, joissa samanlaisia ​​kyselyitä on suoritettava usein. Nämä kyselyt voivat sisältää useita kenttiä, suodatinehtoja ja aggregaattianalyysiä liiketoimintalogiikan monimutkaisuuden vuoksi. Näiden toimintojen optimoimiseksi ja kehittämisen tehokkuuden parantamiseksi Elasticsearch tarjoaa hakupohjien toiminnon. Tässä artikkelissa kerrotaan, kuinka voit käyttää Elasticsearchin hakumalleja kyselyjen uudelleenkäyttöön ja jakamiseen.

1. Miksi käyttää hakumalleja

Vaikka useimmat kyselyt voivat olla suhteellisen yksinkertaisia ​​päivittäisessä kehityksessä, joissakin monimutkaisissa liiketoimintaskenaarioissa (kuten rahoitus, lääketiede jne.) haun on ehkä suoritettava tai palautettava kymmeniä kenttiä, ja siihen voi liittyä monimutkaisia ​​suodatusehtoja ja analyysiä . Tässä vaiheessa jokaisen kyselyn manuaalinen kirjoittaminen ei ole vain tehotonta, vaan myös virhealtista. Hakumallit ovat kuin talletettuja proseduureja tai toimintoja MySQL:ssä. Ne tarvitsee määritellä vain kerran, ja hakutoiminto voidaan suorittaa myöhemmin koodissa kutsumalla mallia ja antamalla parametreja, mikä parantaa huomattavasti kehityksen tehokkuutta ja kyselyn joustavuutta.

2. Hakumallin johdantotapaus

2.1 Vakiolomake

Hakumallin perusmuoto on määrittää JSON-objekti, joka sisältää kyselyehdot ja läpäisyn_search/template API-kutsut. Esimerkiksi:

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

Tässä esimerkissä{{kw}}ja{{size}}on muuttuja mallissa, hyväksyttyparamsObjektit välittävät tietyt arvot.

2.2 toJSON-muotoon

toJSONMuodolle on ominaistasource Käytä merkkijonoja määrittämiseen, ja pakottavat merkit ovat pakollisia. Esimerkiksi:

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

2.3 Parametrien välittäminen liitosmenetelmässä

käyttääjoin Menetelmä voi ketjuttaa taulukon elementit merkkijonoksi kyselyehtoja varten. Esimerkiksi:

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 Oletusarvolomake

Voit asettaa mallissa oletusarvoja parametreille, jos parametria ei välitetä kutsuttaessa, oletusarvoa käytetään. Esimerkiksi:

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. Muista malli ja käytä toistuvia kutsuja

3.1 Elasticsearch-tallennusmalli

Jotta mallia voidaan käyttää uudelleen, voimme tallentaa sen Elasticsearchiin. Määrittämällä mallin nimen on kätevää kutsua sitä toistuvasti myöhemmin. Esimerkiksi:

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 Puhelumalli

Kun soitat malliin, ohitaid Voit määrittää tietyn mallin ja välittää vastaavat parametrit. Esimerkiksi:

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

3.3 Tee kysely määritettyyn malliin

Määritettyjä mallitietoja voidaan tiedustella GET-pyyntöjen kautta, esimerkiksi:

GET _scripts/my_test_template
  • 1

3.4 Poista määritetty malli

Jos sinun on poistettava määritetty malli, voit käyttää DELETE-pyyntöä, esimerkiksi:

DELETE _scripts/my_test_template
  • 1

4. Hakumallien edistynyt sovellus

4.1 Vahvistusmalli

Elasticsearch tarjoaa_render/template API mallin vahvistamiseen.