Elasticsearch Basics

I-Elasticsearch yinjini yokukhangela ene-json rest api, isebenzisa iLucene kwaye ibhalwe kwiJava. Inkcazo yazo zonke iingenelo zale njini iyafumaneka website esemthethweni. Kokulandelayo siza kubhekisa kwi-Elasticsearch njenge-ES.

Iinjini ezifanayo zisetyenziselwa uphendlo oluntsonkothileyo kuxwebhu lwedatha. Umzekelo, khangela ngokuthathela ingqalelo i-morphology yolwimi okanye ukukhangela nge-geo coordinates.

Kule nqaku ndiza kuthetha ngeziseko ze-ES usebenzisa umzekelo we-indexing blog posts. Ndiza kukubonisa indlela yokucoca, ukuhlela kunye nokukhangela amaxwebhu.

Ukuze ungaxhomekeki kwinkqubo yokusebenza, ndiya kwenza zonke izicelo kwi-ES usebenzisa i-CURL. Kukho kwakhona iplagin yegoogle chrome ebizwa ingqiqo.

Okubhaliweyo kuqulathe amakhonkco kumaxwebhu kunye neminye imithombo. Ekugqibeleni kukho amakhonkco okufikelela ngokukhawuleza kumaxwebhu. Iinkcazelo zamagama angaqhelekanga zinokufunyanwa kwi uluhlu lwamagama.

Ukuhlohla i-ES

Ukwenza oku, sidinga kuqala iJava. Abaphuhlisi cebisa faka iinguqulelo zeJava ezintsha kunohlaziyo lweJava 8 20 okanye uhlaziyo lweJava 7 55.

Ukuhanjiswa kwe-ES kufumaneka kwi iwebhusayithi yomphuhlisi. Emva kokukhupha i-archive kufuneka usebenze bin/elasticsearch. Iyafumaneka kwakhona iipakethe ze-apt kunye ne-yum. Kukho umfanekiso osemthethweni wedocker. Okunye malunga nofakelo.

Emva kofakelo kunye nokuqaliswa, makhe sijonge ukusebenza:

# для удобства Π·Π°ΠΏΠΎΠΌΠ½ΠΈΠΌ адрСс Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ
#export ES_URL=$(docker-machine ip dev):9200
export ES_URL=localhost:9200

curl -X GET $ES_URL

Siza kufumana into efana nale:

{
  "name" : "Heimdall",
  "cluster_name" : "elasticsearch",
  "version" : {
    "number" : "2.2.1",
    "build_hash" : "d045fc29d1932bce18b2e65ab8b297fbf6cd41a1",
    "build_timestamp" : "2016-03-09T09:38:54Z",
    "build_snapshot" : false,
    "lucene_version" : "5.4.1"
  },
  "tagline" : "You Know, for Search"
}

Isalathiso

Masifake iposti kwi-ES:

# Π”ΠΎΠ±Π°Π²ΠΈΠΌ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ c id 1 Ρ‚ΠΈΠΏΠ° post Π² индСкс blog.
# ?pretty ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π²Ρ‹Π²ΠΎΠ΄ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠΎ-Ρ‡ΠΈΡ‚Π°Π΅ΠΌΡ‹ΠΌ.

curl -XPUT "$ES_URL/blog/post/1?pretty" -d'
{
  "title": "ВСсСлыС котята",
  "content": "<p>БмСшная история ΠΏΡ€ΠΎ котят<p>",
  "tags": [
    "котята",
    "смСшная история"
  ],
  "published_at": "2014-09-12T20:44:42+00:00"
}'

impendulo yeseva:

{
  "_index" : "blog",
  "_type" : "post",
  "_id" : "1",
  "_version" : 1,
  "_shards" : {
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  },
  "created" : false
}

I-ES yenziwe ngokuzenzekelayo Isalathiso blog kunye chwetheza iposti. Sinokuzoba umlinganiso wemiqathango: isalathisi yisiseko sedatha, kwaye uhlobo luyitafile kule database. Uhlobo ngalunye lunenkqubo yalo βˆ’ imephu, kanye njengetafile yobudlelwane. Imephu yenziwa ngokuzenzekelayo xa uxwebhu luphawulwe:

# ΠŸΠΎΠ»ΡƒΡ‡ΠΈΠΌ mapping всСх Ρ‚ΠΈΠΏΠΎΠ² индСкса blog
curl -XGET "$ES_URL/blog/_mapping?pretty"

Kwimpendulo yomncedisi, ndongeze amaxabiso emihlaba yoxwebhu olunesalathisi kumazwana:

{
  "blog" : {
    "mappings" : {
      "post" : {
        "properties" : {
          /* "content": "<p>БмСшная история ΠΏΡ€ΠΎ котят<p>", */ 
          "content" : {
            "type" : "string"
          },
          /* "published_at": "2014-09-12T20:44:42+00:00" */
          "published_at" : {
            "type" : "date",
            "format" : "strict_date_optional_time||epoch_millis"
          },
          /* "tags": ["котята", "смСшная история"] */
          "tags" : {
            "type" : "string"
          },
          /*  "title": "ВСсСлыС котята" */
          "title" : {
            "type" : "string"
          }
        }
      }
    }
  }
}

Kubalulekile ukuqaphela ukuba i-ES ayahluli phakathi kwexabiso elinye kunye noluhlu lwamaxabiso. Umzekelo, indawo yesihloko iqulathe nje isihloko, kwaye indawo yeethegi iqulethe uluhlu lweentambo, nangona zimele ngendlela efanayo kwimephu.
Siza kuthetha ngakumbi malunga nokwenza iimephu kamva.

Izicelo

Ukufumana kwakhona uxwebhu nge-id yalo:

# ΠΈΠ·Π²Π»Π΅Ρ‡Π΅ΠΌ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ с id 1 Ρ‚ΠΈΠΏΠ° post ΠΈΠ· индСкса blog
curl -XGET "$ES_URL/blog/post/1?pretty"
{
  "_index" : "blog",
  "_type" : "post",
  "_id" : "1",
  "_version" : 1,
  "found" : true,
  "_source" : {
    "title" : "ВСсСлыС котята",
    "content" : "<p>БмСшная история ΠΏΡ€ΠΎ котят<p>",
    "tags" : [ "котята", "смСшная история" ],
    "published_at" : "2014-09-12T20:44:42+00:00"
  }
}

Izitshixo ezitsha zivele kwimpendulo: _version ΠΈ _source. Ngokubanzi, zonke izitshixo ziqala nge _ zihlelwa njengasemthethweni.

Ngundoqo _version ibonisa uguqulelo loxwebhu. Iyafuneka ukuze indlela yokutshixa enethemba isebenze. Umzekelo, sifuna ukutshintsha uxwebhu olunoguqulelo 1. Singenisa uxwebhu olutshintshiweyo kwaye sibonise ukuba olu luhlelo loxwebhu olunoguqulelo 1. Ukuba omnye umntu uhlele uxwebhu ngenguqulo 1 kwaye wangenisa utshintsho phambi kwethu, ngoko I-ES ayiyi kwamkela utshintsho lwethu, kuba igcina uxwebhu ngoguqulelo lwesi-2.

Ngundoqo _source iqulathe uxwebhu esiluphawulileyo. I-ES ayisebenzisi eli xabiso kwimisebenzi yokukhangela kuba Izalathisi zisetyenziselwa ukukhangela. Ukugcina indawo, i-ES igcina uxwebhu lomthombo ocinezelweyo. Ukuba sifuna kuphela i-id, kwaye hayi uxwebhu lonke lomthombo, ngoko ke sinokukhubaza ugcino lwemithombo.

Ukuba asifuni ulwazi olongezelelweyo, sinokufumana kuphela imixholo ye-_source:

curl -XGET "$ES_URL/blog/post/1/_source?pretty"
{
  "title" : "ВСсСлыС котята",
  "content" : "<p>БмСшная история ΠΏΡ€ΠΎ котят<p>",
  "tags" : [ "котята", "смСшная история" ],
  "published_at" : "2014-09-12T20:44:42+00:00"
}

Unokukhetha kuphela iindawo ezithile:

# ΠΈΠ·Π²Π»Π΅Ρ‡Π΅ΠΌ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΠ»Π΅ title
curl -XGET "$ES_URL/blog/post/1?_source=title&pretty"
{
  "_index" : "blog",
  "_type" : "post",
  "_id" : "1",
  "_version" : 1,
  "found" : true,
  "_source" : {
    "title" : "ВСсСлыС котята"
  }
}

Masibonise izithuba ezimbalwa kwaye siqhube imibuzo entsokothileyo.

curl -XPUT "$ES_URL/blog/post/2" -d'
{
  "title": "ВСсСлыС Ρ‰Π΅Π½ΠΊΠΈ",
  "content": "<p>БмСшная история ΠΏΡ€ΠΎ Ρ‰Π΅Π½ΠΊΠΎΠ²<p>",
  "tags": [
    "Ρ‰Π΅Π½ΠΊΠΈ",
    "смСшная история"
  ],
  "published_at": "2014-08-12T20:44:42+00:00"
}'
curl -XPUT "$ES_URL/blog/post/3" -d'
{
  "title": "Как Ρƒ мСня появился ΠΊΠΎΡ‚Π΅Π½ΠΎΠΊ",
  "content": "<p>Π”ΡƒΡˆΠ΅Ρ€Π°Π·Π΄ΠΈΡ€Π°ΡŽΡ‰Π°Ρ история ΠΏΡ€ΠΎ Π±Π΅Π΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΡ‚Π΅Π½ΠΊΠ° с ΡƒΠ»ΠΈΡ†Ρ‹<p>",
  "tags": [
    "котята"
  ],
  "published_at": "2014-07-21T20:44:42+00:00"
}'

Ukuhlelwa

# Π½Π°ΠΉΠ΄Π΅ΠΌ послСдний пост ΠΏΠΎ Π΄Π°Ρ‚Π΅ ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΈ ΠΈΠ·Π²Π»Π΅Ρ‡Π΅ΠΌ поля title ΠΈ published_at
curl -XGET "$ES_URL/blog/post/_search?pretty" -d'
{
  "size": 1,
  "_source": ["title", "published_at"],
  "sort": [{"published_at": "desc"}]
}'
{
  "took" : 8,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "failed" : 0
  },
  "hits" : {
    "total" : 3,
    "max_score" : null,
    "hits" : [ {
      "_index" : "blog",
      "_type" : "post",
      "_id" : "1",
      "_score" : null,
      "_source" : {
        "title" : "ВСсСлыС котята",
        "published_at" : "2014-09-12T20:44:42+00:00"
      },
      "sort" : [ 1410554682000 ]
    } ]
  }
}

Sakhetha isithuba sokugqibela. size inciphisa inani lamaxwebhu aza kukhutshwa. total ibonisa inani elipheleleyo lamaxwebhu ahambelana nesicelo. sort kwimveliso iqulathe uluhlu lwenani elipheleleyo apho ulungiso olwenziwayo. Ezo. umhla uguqulwe waba yinani elipheleleyo. Ulwazi oluthe vetshe malunga nokuhlelwa lungafumaneka kwi amaxwebhu.

Izihluzi kunye nemibuzo

ES ukusukela uguqulelo 2 alwahluli phakathi kohluzo kunye nemibuzo, endaweni yoko ingqiqo yomxholo yaziswa.
Umbuzo wombuzo uyahluka kumxholo wokucoca kuba umbuzo wenza i _score kwaye ayigcinwanga. Ndiza kukubonisa ukuba yintoni _inqaku kamva.

Hluza ngokomhla

Sisebenzisa isicelo uluhlu kumxholo wesihluzi:

# ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ посты, ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½Π½Ρ‹Π΅ 1ΠΎΠ³ΠΎ сСнтября ΠΈΠ»ΠΈ ΠΏΠΎΠ·ΠΆΠ΅
curl -XGET "$ES_URL/blog/post/_search?pretty" -d'
{
  "filter": {
    "range": {
      "published_at": { "gte": "2014-09-01" }
    }
  }
}'

Hluza ngeethegi

Sisebenzisa umbuzo wexesha ukukhangela iID zoxwebhu oluqulathe igama elinikiweyo:

# Π½Π°ΠΉΠ΄Π΅ΠΌ всС Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρ‹, Π² ΠΏΠΎΠ»Π΅ tags ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π΅ΡΡ‚ΡŒ элСмСнт 'котята'
curl -XGET "$ES_URL/blog/post/_search?pretty" -d'
{
  "_source": [
    "title",
    "tags"
  ],
  "filter": {
    "term": {
      "tags": "котята"
    }
  }
}'
{
  "took" : 9,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "failed" : 0
  },
  "hits" : {
    "total" : 2,
    "max_score" : 1.0,
    "hits" : [ {
      "_index" : "blog",
      "_type" : "post",
      "_id" : "1",
      "_score" : 1.0,
      "_source" : {
        "title" : "ВСсСлыС котята",
        "tags" : [ "котята", "смСшная история" ]
      }
    }, {
      "_index" : "blog",
      "_type" : "post",
      "_id" : "3",
      "_score" : 1.0,
      "_source" : {
        "title" : "Как Ρƒ мСня появился ΠΊΠΎΡ‚Π΅Π½ΠΎΠΊ",
        "tags" : [ "котята" ]
      }
    } ]
  }
}

Ukukhangela okubhaliweyo okupheleleyo

Amaxwebhu ethu amathathu aqulathe oku kulandelayo kummandla womxholo:

  • <p>БмСшная история ΠΏΡ€ΠΎ котят<p>
  • <p>БмСшная история ΠΏΡ€ΠΎ Ρ‰Π΅Π½ΠΊΠΎΠ²<p>
  • <p>Π”ΡƒΡˆΠ΅Ρ€Π°Π·Π΄ΠΈΡ€Π°ΡŽΡ‰Π°Ρ история ΠΏΡ€ΠΎ Π±Π΅Π΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΡ‚Π΅Π½ΠΊΠ° с ΡƒΠ»ΠΈΡ†Ρ‹<p>

Sisebenzisa umbuzo wokudibanisa ukukhangela iID zoxwebhu oluqulathe igama elinikiweyo:

# source: false ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Ρ‚ΡŒ _source Π½Π°ΠΉΠ΄Π΅Π½Π½Ρ‹Ρ… Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ²
curl -XGET "$ES_URL/blog/post/_search?pretty" -d'
{
  "_source": false,
  "query": {
    "match": {
      "content": "история"
    }
  }
}'
{
  "took" : 13,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "failed" : 0
  },
  "hits" : {
    "total" : 3,
    "max_score" : 0.11506981,
    "hits" : [ {
      "_index" : "blog",
      "_type" : "post",
      "_id" : "2",
      "_score" : 0.11506981
    }, {
      "_index" : "blog",
      "_type" : "post",
      "_id" : "1",
      "_score" : 0.11506981
    }, {
      "_index" : "blog",
      "_type" : "post",
      "_id" : "3",
      "_score" : 0.095891505
    } ]
  }
}

Nangona kunjalo, ukuba sikhangela "amabali" kwintsimi yomxholo, asiyi kufumana nantoni na, kuba Isalathiso siqulethe amagama okuqala kuphela, kungekhona iziqu zawo. Ukuze wenze uphando oluphezulu, kufuneka uqwalasele i-analyzer.

Intsimi _score ibonisa ukubaluleka. Ukuba isicelo senziwe kumxholo wokucoca, ngoko ke ixabiso le _score liyakuhlala lilingana no 1, nto leyo ethetha ukuhambelana okupheleleyo kwisihluzi.

Abahlalutyi

Abahlalutyi ziyafuneka ukuguqula okubhaliweyo okuyintsusa kwiseti yeempawu.
Abahlalutyi baquka enye Isibonisi kunye neenketho ezininzi Izihluzi zophawu. I-Tokenizer inokulandelwa ngabaninzi Izihluzi zeCharfilter. Iimpawu ziqhekeza umtya womthombo kwiimpawu, njengezithuba kunye neempawu zokubhala. I-TokenFilter inokutshintsha amathokheni, icime okanye yongeze amatsha, umzekelo, shiya kuphela isiqu segama, ukususa izimaphambili, ukongeza izithethantonye. I-CharFilter - itshintsha yonke imitya yomthombo, umzekelo, inqumle iithegi ze-html.

I-ES ineqela abahlalutyi abasemgangathweni. Ngokomzekelo, i-analyzer IsiRashiya.

Masithathe inzuzo Api kwaye makhe sibone indlela abahlalutyi abasemgangathweni kunye nabahlalutyi baseRussia bawuguqula ngayo umtya "Amabali ahlekisayo malunga neekati":

# ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ standard       
# ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ ASCII символы
curl -XGET "$ES_URL/_analyze?pretty&analyzer=standard&text=%D0%92%D0%B5%D1%81%D0%B5%D0%BB%D1%8B%D0%B5%20%D0%B8%D1%81%D1%82%D0%BE%D1%80%D0%B8%D0%B8%20%D0%BF%D1%80%D0%BE%20%D0%BA%D0%BE%D1%82%D1%8F%D1%82"
{
  "tokens" : [ {
    "token" : "вСсСлыС",
    "start_offset" : 0,
    "end_offset" : 7,
    "type" : "<ALPHANUM>",
    "position" : 0
  }, {
    "token" : "истории",
    "start_offset" : 8,
    "end_offset" : 15,
    "type" : "<ALPHANUM>",
    "position" : 1
  }, {
    "token" : "ΠΏΡ€ΠΎ",
    "start_offset" : 16,
    "end_offset" : 19,
    "type" : "<ALPHANUM>",
    "position" : 2
  }, {
    "token" : "котят",
    "start_offset" : 20,
    "end_offset" : 25,
    "type" : "<ALPHANUM>",
    "position" : 3
  } ]
}
# ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ russian
curl -XGET "$ES_URL/_analyze?pretty&analyzer=russian&text=%D0%92%D0%B5%D1%81%D0%B5%D0%BB%D1%8B%D0%B5%20%D0%B8%D1%81%D1%82%D0%BE%D1%80%D0%B8%D0%B8%20%D0%BF%D1%80%D0%BE%20%D0%BA%D0%BE%D1%82%D1%8F%D1%82"
{
  "tokens" : [ {
    "token" : "вСсСл",
    "start_offset" : 0,
    "end_offset" : 7,
    "type" : "<ALPHANUM>",
    "position" : 0
  }, {
    "token" : "истор",
    "start_offset" : 8,
    "end_offset" : 15,
    "type" : "<ALPHANUM>",
    "position" : 1
  }, {
    "token" : "ΠΊΠΎΡ‚",
    "start_offset" : 20,
    "end_offset" : 25,
    "type" : "<ALPHANUM>",
    "position" : 3
  } ]
}

Umhlalutyi osemgangathweni wahlula umtya ngezithuba kwaye waguqula yonke into ibe yincinci, umhlalutyi waseRussia wasusa amagama angabalulekanga, wayiguqulela kwityala elisezantsi kwaye washiya isiqu samagama.

Makhe sibone ukuba yeyiphi iTokenizer, iTokenFilters, CharFilters esetyenziswa ngumhlalutyi waserussia:

{
  "filter": {
    "russian_stop": {
      "type":       "stop",
      "stopwords":  "_russian_"
    },
    "russian_keywords": {
      "type":       "keyword_marker",
      "keywords":   []
    },
    "russian_stemmer": {
      "type":       "stemmer",
      "language":   "russian"
    }
  },
  "analyzer": {
    "russian": {
      "tokenizer":  "standard",
      /* TokenFilters */
      "filter": [
        "lowercase",
        "russian_stop",
        "russian_keywords",
        "russian_stemmer"
      ]
      /* CharFilters ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ */
    }
  }
}

Makhe sichaze umhlalutyi wethu osekwe kwisiRashiya, oya kusika iithegi ze-html. Masiyibize ngokungagqibekanga, kuba umhlalutyi oneli gama uya kusetyenziswa ngokungagqibekanga.

{
  "filter": {
    "ru_stop": {
      "type":       "stop",
      "stopwords":  "_russian_"
    },
    "ru_stemmer": {
      "type":       "stemmer",
      "language":   "russian"
    }
  },
  "analyzer": {
    "default": {
      /* добавляСм ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ html Ρ‚Π΅Π³ΠΎΠ² */
      "char_filter": ["html_strip"],
      "tokenizer":  "standard",
      "filter": [
        "lowercase",
        "ru_stop",
        "ru_stemmer"
      ]
    }
  }
}

Okokuqala, zonke iithegi ze-HTML ziya kususwa kumtya womthombo, ngoko umgangatho we-tokenizer uya kukwahlula kwiimpawu, iithokheni ezibangelwayo ziya kuhambela kwimeko ephantsi, amagama angenamsebenzi aya kususwa, kwaye amathokheni asele aya kuhlala esiqu segama.

Ukwenza Isalathiso

Ngentla sichaze umhlalutyi ongagqibekanga. Iya kusebenza kuwo onke amasimi eentambo. Iposti yethu iqulethe uluhlu lweethegi, ngoko ke iithegi ziya kuqhutyelwa phambili ngumhlalutyi. Ngokuba Sikhangela izithuba ngomdlalo ochanekileyo kwithegi, emva koko kufuneka sikhubaze uhlalutyo lwendawo yeethegi.

Masenze iblogi yesalathiso kunye nesihlalutyi kunye nemephu, apho uhlalutyo lwendawo yeethegi luvaliwe:

curl -XPOST "$ES_URL/blog2" -d'
{
  "settings": {
    "analysis": {
      "filter": {
        "ru_stop": {
          "type": "stop",
          "stopwords": "_russian_"
        },
        "ru_stemmer": {
          "type": "stemmer",
          "language": "russian"
        }
      },
      "analyzer": {
        "default": {
          "char_filter": [
            "html_strip"
          ],
          "tokenizer": "standard",
          "filter": [
            "lowercase",
            "ru_stop",
            "ru_stemmer"
          ]
        }
      }
    }
  },
  "mappings": {
    "post": {
      "properties": {
        "content": {
          "type": "string"
        },
        "published_at": {
          "type": "date"
        },
        "tags": {
          "type": "string",
          "index": "not_analyzed"
        },
        "title": {
          "type": "string"
        }
      }
    }
  }
}'

Masidibanise izithuba ezi-3 ezifanayo kwesi salathisi (iblog2). Ndiya kuyishiya le nkqubo kuba... iyafana nokongeza amaxwebhu kwisalathiso seblogi.

Ukukhangela okubhaliweyo okupheleleyo ngenkxaso yokubonakalisa

Makhe sijonge olunye uhlobo lwesicelo:

# Π½Π°ΠΉΠ΄Π΅ΠΌ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρ‹, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… встрСчаСтся слово 'истории'
# query -> simple_query_string -> query содСрТит поисковый запрос
# ΠΏΠΎΠ»Π΅ title ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ 3
# ΠΏΠΎΠ»Π΅ tags ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ 2
# ΠΏΠΎΠ»Π΅ content ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ 1
# ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΡ€ΠΈ Ρ€Π°Π½ΠΆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ²
curl -XPOST "$ES_URL/blog2/post/_search?pretty" -d'
{
  "query": {
    "simple_query_string": {
      "query": "истории",
      "fields": [
        "title^3",
        "tags^2",
        "content"
      ]
    }
  }
}'

Ngokuba Sisebenzisa i-analyzer ene-Russian stemming, ngoko esi sicelo siya kubuyisela onke amaxwebhu, nangona aqulethe kuphela igama elithi 'imbali'.

Isicelo sinokuqulatha abalinganiswa abakhethekileyo, umzekelo:

""fried eggs" +(eggplant | potato) -frittata"

Cela isivakalisi:

+ signifies AND operation
| signifies OR operation
- negates a single token
" wraps a number of tokens to signify a phrase for searching
* at the end of a term signifies a prefix query
( and ) signify precedence
~N after a word signifies edit distance (fuzziness)
~N after a phrase signifies slop amount
# Π½Π°ΠΉΠ΄Π΅ΠΌ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Π±Π΅Π· слова 'Ρ‰Π΅Π½ΠΊΠΈ'
curl -XPOST "$ES_URL/blog2/post/_search?pretty" -d'
{
  "query": {
    "simple_query_string": {
      "query": "-Ρ‰Π΅Π½ΠΊΠΈ",
      "fields": [
        "title^3",
        "tags^2",
        "content"
      ]
    }
  }
}'

# ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ 2 поста ΠΏΡ€ΠΎ ΠΊΠΎΡ‚ΠΈΠΊΠΎΠ²

iimbekiselo

PS

Ukuba unomdla kumanqaku afanayo-izifundo, unemibono yamanqaku amatsha, okanye uneziphakamiso zentsebenziswano, ke ndiya kuvuya ukufumana umyalezo kumyalezo wakho okanye nge-imeyile. [imeyile ikhuselwe].

umthombo: www.habr.com