I-Elasticsearch Basics

I-Elasticsearch iyinjini yokusesha ene-json rest api, isebenzisa i-Lucene futhi ibhalwe nge-Java. Incazelo yazo zonke izinzuzo zale njini itholakala ku iwebhusayithi esemthethweni. Ngokulandelayo sizobhekisela ku-Elasticsearch njenge-ES.

Izinjini ezifanayo zisetshenziselwa ukusesha okuyinkimbinkimbi kusizindalwazi sedokhumenti. Isibonelo, sesha ngokunaka imofology yolimi noma sesha ngama-geo coordinates.

Kulesi sihloko ngizokhuluma ngezisekelo ze-ES usebenzisa isibonelo sokukhomba okuthunyelwe kwebhulogi. Ngizokubonisa indlela yokuhlunga, ukuhlunga nokusesha amadokhumenti.

Ukuze nginganciki ohlelweni lokusebenza, ngizokwenza zonke izicelo ku-ES ngisebenzisa i-CURL. Kukhona ne-plugin ye-google chrome ebizwa ingqondo.

Umbhalo uqukethe izixhumanisi eziya kumadokhumenti neminye imithombo. Ekugcineni kukhona izixhumanisi zokufinyelela ngokushesha kumadokhumenti. Izincazelo zamagama angajwayelekile zingatholakala ku uhlu lwamagama.

Ifaka i-ES

Ukuze senze lokhu, sidinga kuqala i-Java. Onjiniyela batusa faka izinguqulo ze-Java ezintsha kune-Java 8 update 20 noma Java 7 update 55.

Ukusabalalisa kwe-ES kuyatholakala ku- iwebhusayithi yonjiniyela. Ngemuva kokukhipha ingobo yomlando udinga ukuyiqalisa bin/elasticsearch. Iyatholakala futhi amaphakheji we-apt kanye ne-yum. Kukhona isithombe esisemthethweni se-docker. Okuningi mayelana nokufaka.

Ngemva kokufaka nokwethulwa, ake sihlole ukusebenza:

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

curl -X GET $ES_URL

Sizothola okuthile okufana nalokhu:

{
  "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"
}

Ukwenza inkomba

Ake sengeze okuthunyelwe ku-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 idalwe ngokuzenzakalelayo inkomba blog kanye thayipha okuthunyelwe. Singadweba isifaniso esinemibandela: inkomba iyisizindalwazi, futhi uhlobo luyithebula kulesi sizindalwazi. Uhlobo ngalunye lunohlelo lwalo βˆ’ mapping, njengetafula lobudlelwano. Ukwenza imephu kukhiqizwa ngokuzenzakalelayo lapho idokhumenti ikhonjisiwe:

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

Empendulweni yeseva, ngengeze amanani ezinkambu zedokhumenti enenkomba 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 ukuthi i-ES ayihlukanisi phakathi kwevelu eyodwa kanye nohlu lwamanani. Isibonelo, inkambu yesihloko imane iqukethe isihloko, futhi inkambu yomaka iqukethe uchungechunge lwezintambo, nakuba zimelelwe ngendlela efanayo kumephu.
Sizokhuluma kabanzi mayelana nokwenza imephu kamuva.

Izicelo

Ibuyisa idokhumenti nge-id yayo:

# ΠΈΠ·Π²Π»Π΅Ρ‡Π΅ΠΌ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ с 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"
  }
}

Okhiye abasha bavele empendulweni: _version ΠΈ _source. Ngokuvamile, zonke izinkinobho ziqala _ zihlukaniswa njengezisemthethweni.

Ukhiye _version ibonisa inguqulo yedokhumenti. Kudingeka ukuze indlela yokukhiya enethemba isebenze. Isibonelo, sifuna ukushintsha idokhumenti enenguqulo 1. Sihambisa idokhumenti eshintshiwe futhi sibonisa ukuthi lokhu kuwukuhlelwa kwedokhumenti enenguqulo 1. Uma omunye futhi ehlele idokhumenti enenguqulo 1 futhi wahambisa izinguquko phambi kwethu, khona-ke. I-ES ngeke yamukele izinguquko zethu, ngoba igcina idokhumenti nenguqulo 2.

Ukhiye _source iqukethe idokhumenti esiyikhombile. I-ES ayisebenzisi leli nani emisebenzini yosesho ngoba Izinkomba zisetshenziselwa ukusesha. Ukuze wonge isikhala, i-ES igcina idokhumenti yomthombo ecindezelwe. Uma sidinga kuphela i-id, hhayi yonke idokhumenti yomthombo, lapho-ke singakhubaza isitoreji somthombo.

Uma singadingi ulwazi olwengeziwe, singathola kuphela okuqukethwe _komthombo:

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

Ungaphinda ukhethe izinkambu ezithile kuphela:

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

Ake sikhombe amanye amaposi ambalwa futhi siqhube imibuzo eyinkimbinkimbi.

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"
}'

Ukuhlunga

# Π½Π°ΠΉΠ΄Π΅ΠΌ послСдний пост ΠΏΠΎ Π΄Π°Ρ‚Π΅ ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΈ ΠΈΠ·Π²Π»Π΅Ρ‡Π΅ΠΌ поля 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 ]
    } ]
  }
}

Sikhethe okuthunyelwe kokugcina. size ikhawulela inani lamadokhumenti azokhishwa. total ibonisa isamba senani lamadokhumenti afana nesicelo. sort kokuphumayo kuqukethe izinombolo eziningi lapho ukuhlunga kwenziwa khona. Labo. idethi iguqulelwe ekubeni inombolo ephelele. Ulwazi olwengeziwe mayelana nokuhlunga lungatholakala ku imibhalo.

Izihlungi nemibuzo

ES njengoba inguqulo 2 ingahlukanisi phakathi kwezihlungi nemibuzo, esikhundleni salokho kwethulwa umqondo wezimo.
Umongo wombuzo uyahluka engqikithini yesihlungi ngoba umbuzo ukhiqiza _score futhi awugciniwe. Ngizokukhombisa ukuthi yini _score kamuva.

Hlunga ngedethi

Sisebenzisa isicelo uhla kumongo wesihlungi:

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

Hlunga ngomaka

Sisebenzisa umbuzo wethemu ukucinga ama-id edokhumenti aqukethe igama elinikeziwe:

# Π½Π°ΠΉΠ΄Π΅ΠΌ всС Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρ‹, Π² ΠΏΠΎΠ»Π΅ 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" : [ "котята" ]
      }
    } ]
  }
}

Ukusesha umbhalo ogcwele

Amadokhumenti ethu amathathu aqukethe okulandelayo emkhakheni wokuqukethwe:

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

Sisebenzisa fanisa umbuzo ukucinga ama-id edokhumenti aqukethe igama elinikeziwe:

# 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
    } ]
  }
}

Kodwa-ke, uma sifuna "izindaba" emkhakheni wokuqukethwe, ngeke sithole lutho, ngoba Inkomba iqukethe amagama okuqala kuphela, hhayi iziqu zawo. Ukuze wenze usesho lwekhwalithi ephezulu, udinga ukulungisa i-analyzer.

Insimu _score imibukiso ukuhlobana. Uma isicelo senziwe ngomongo wokuhlunga, khona-ke inani elithi _score liyohlala lilingana no-1, okusho ukufana okuphelele nesihlungi.

Abahlaziyi

Abahlaziyi ziyadingeka ukuguqula umbhalo womthombo ube isethi yamathokheni.
Abahlaziyi bahlanganisa eyodwa Ithokheni futhi eziningana ozikhethela Izihlungi ze-Token. I-Tokenizer ingase yandulwe ngabaningana Ama-CharFilters. Amathokheni aphula iyunithi yezinhlamvu yomthombo ibe amathokheni, njengezikhala nezinhlamvu zezimpawu zokuloba. I-TokenFilter ingashintsha amathokheni, isuse noma yengeze amasha, isibonelo, ishiye isiqu segama kuphela, isuse izakhi, yengeze amagama afanayo. I-CharFilter - ishintsha yonke iyunithi yezinhlamvu yomthombo, isibonelo, isika amathegi e-html.

I-ES inezimbalwa abahlaziyi abajwayelekile. Isibonelo, i-analyzer russian.

Asisebenzise ithuba Api futhi ake sibone ukuthi abahlaziyi abajwayelekile nabama-russian baluguqula kanjani uchungechunge "Izindaba ezihlekisayo mayelana namakati":

# ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ 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
  } ]
}

I-analyzer evamile yahlukanisa intambo yaba izikhala futhi yaguqula yonke into yaba yizinhlamvu ezincane, umhlaziyi wesiRashiya wasusa amagama angabalulekile, wayiguqulela ekubeni yizinhlamvu ezincane futhi washiya isiqu samagama.

Ake sibone ukuthi iyiphi i-Tokenizer, TokenFilters, CharFilters esetshenziswa umhlaziyi 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 ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ */
    }
  }
}

Ake sichaze umhlaziyi wethu ngokusekelwe kusiRashiya, ozosika amathegi e-html. Masiyibize ngokuzenzakalelayo, ngoba isihlaziyi esinaleli gama sizosetshenziswa ngokuzenzakalelayo.

{
  "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, wonke amathegi e-HTML azosuswa emgqeni womthombo, khona-ke izinga le-tokenizer lizolihlukanisa libe amathokheni, amathokheni avelayo azothuthela esimweni esincane, amagama angabalulekile azosuswa, futhi amathokheni asele azohlala isiqu segama.

Ukudala inkomba

Ngenhla sichaze i-analyzer ezenzakalelayo. Izosebenza kuzo zonke izinkambu zeyunithi yezinhlamvu. Okuthunyelwe kwethu kuqukethe inqwaba yomaka, ngakho omaka bazophinde bacutshungulwe ngumhlaziyi. Ngoba Sifuna okuthunyelwe ngokufana ncamashi nethegi, bese sidinga ukukhubaza ukuhlaziya inkambu yomaka.

Masidale i-blog2 yenkomba ene-analyzer kanye nemephu, lapho ukuhlaziywa kwenkambu yomaka kukhutshaziwe:

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"
        }
      }
    }
  }
}'

Ake sengeze amaposi angu-3 afanayo kule nkomba (blog2). Ngizoyiyeka le nqubo ngoba... kufana nokwengeza amadokhumenti enkombeni yebhulogi.

Usesho lombhalo ogcwele ngokusekelwa kwenkulumo

Ake sibheke 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"
      ]
    }
  }
}'

Ngoba Sisebenzisa i-analyzer enesiqu sesi-Russian, bese lesi sicelo sizobuyisela wonke amadokhumenti, nakuba aqukethe kuphela igama elithi 'umlando'.

Isicelo singaqukatha izinhlamvu ezikhethekile, isibonelo:

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

Cela i-syntax:

+ 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 поста ΠΏΡ€ΠΎ ΠΊΠΎΡ‚ΠΈΠΊΠΎΠ²

izithenjwa

PS

Uma unentshisekelo kulezo zifundo-zezihloko, unemibono yezihloko ezintsha noma uneziphakamiso zokubambisana, ngizojabula ukuthola umlayezo kumlayezo womuntu siqu noma nge-imeyili m.kuzmin+habr@darkleaf.ru.

Source: www.habr.com