Misingi ya Elasticsearch

Elasticsearch ni injini ya utaftaji iliyo na json rest api, kwa kutumia Lucene na imeandikwa katika Java. Maelezo ya faida zote za injini hii yanapatikana tovuti rasmi. Katika kile kinachofuata tutarejelea Elasticsearch kama ES.

Injini zinazofanana hutumiwa kwa utafutaji tata katika hifadhidata ya hati. Kwa mfano, tafuta kwa kuzingatia mofolojia ya lugha au tafuta kwa kuratibu za kijiografia.

Katika nakala hii nitazungumza juu ya misingi ya ES kwa kutumia mfano wa kuorodhesha machapisho ya blogi. Nitakuonyesha jinsi ya kuchuja, kupanga na kutafuta hati.

Ili kutotegemea mfumo wa uendeshaji, nitafanya maombi yote kwa ES kwa kutumia CURL. Pia kuna programu-jalizi ya google chrome inayoitwa maana.

Maandishi yana viungo vya hati na vyanzo vingine. Mwishoni kuna viungo vya ufikiaji wa haraka wa nyaraka. Ufafanuzi wa maneno yasiyojulikana yanaweza kupatikana katika misamiati.

Inasakinisha ES

Ili kufanya hivyo, kwanza tunahitaji Java. Watengenezaji Kupendekeza sakinisha matoleo ya Java mapya zaidi kuliko sasisho la Java 8 20 au sasisho la Java 7 55.

Usambazaji wa ES unapatikana kwa tovuti ya msanidi. Baada ya kufungua kumbukumbu unahitaji kukimbia bin/elasticsearch. Inapatikana pia vifurushi vya apt na yum. Kuna picha rasmi kwa docker. Zaidi kuhusu ufungaji.

Baada ya ufungaji na uzinduzi, hebu tuangalie utendaji:

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

curl -X GET $ES_URL

Tutapokea kitu kama hiki:

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

Indexing

Wacha tuongeze chapisho kwa 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"
}'

majibu ya seva:

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

ES imeundwa kiotomatiki faharisi blog na aina ya chapisho. Tunaweza kuchora mlinganisho wa masharti: faharisi ni hifadhidata, na aina ni jedwali katika hifadhidata hii. Kila aina ina mpango wake - ramani, kama meza ya uhusiano. Kuchora ramani hutengenezwa kiotomatiki wakati hati imeorodheshwa:

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

Katika majibu ya seva, niliongeza maadili ya uwanja wa hati iliyoonyeshwa kwenye maoni:

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

Inafaa kukumbuka kuwa ES haitofautishi kati ya thamani moja na safu ya maadili. Kwa mfano, sehemu ya kichwa ina kichwa tu, na sehemu ya lebo ina safu ya mifuatano, ingawa inawakilishwa kwa njia sawa katika upangaji ramani.
Tutazungumza zaidi kuhusu ramani baadaye.

Maombi

Kurejesha hati kwa kitambulisho chake:

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

Vifunguo vipya vilionekana kwenye jibu: _version ΠΈ _source. Kwa ujumla, funguo zote kuanzia na _ zimeainishwa kama rasmi.

Muhimu _version inaonyesha toleo la hati. Inahitajika kwa utaratibu wa kufungia wenye matumaini kufanya kazi. Kwa mfano, tunataka kubadilisha hati iliyo na toleo la 1. Tunawasilisha hati iliyobadilishwa na kuonyesha kuwa hii ni mabadiliko ya hati yenye toleo la 1. Ikiwa mtu mwingine pia alihariri hati yenye toleo la 1 na kuwasilisha mabadiliko mbele yetu, basi ES haitakubali mabadiliko yetu, kwa sababu huhifadhi hati na toleo la 2.

Muhimu _source ina hati ambayo tuliorodhesha. ES haitumii thamani hii kwa shughuli za utafutaji kwa sababu Fahirisi hutumiwa kutafuta. Ili kuokoa nafasi, ES huhifadhi hati ya chanzo iliyobanwa. Ikiwa tunahitaji kitambulisho pekee, na sio hati nzima ya chanzo, basi tunaweza kuzima hifadhi ya chanzo.

Ikiwa hatuhitaji maelezo ya ziada, tunaweza kupata maudhui ya _source pekee:

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

Unaweza pia kuchagua sehemu fulani tu:

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

Hebu tuorodheshe machapisho machache zaidi na tuendeshe maswali magumu zaidi.

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

Panga

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

Tulichagua chapisho la mwisho. size inapunguza idadi ya hati zinazopaswa kutolewa. total inaonyesha jumla ya idadi ya hati zinazolingana na ombi. sort katika pato ina safu ya nambari kamili ambayo upangaji unafanywa. Wale. tarehe ilibadilishwa kuwa nambari kamili. Habari zaidi juu ya kupanga inaweza kupatikana katika nyaraka.

Vichujio na maswali

ES kwa kuwa toleo la 2 halitofautishi kati ya vichungi na hoja, badala yake dhana ya miktadha imeanzishwa.
Muktadha wa hoja hutofautiana na muktadha wa kichujio kwa kuwa hoja hutoa _score na haijahifadhiwa. Nitakuonyesha _score ni nini baadaye.

Chuja kwa tarehe

Tunatumia ombi mbalimbali katika muktadha wa kichungi:

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

Chuja kwa lebo

Tunatumia swali la muda kutafuta vitambulisho vya hati vyenye neno fulani:

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

Utafutaji wa maandishi kamili

Hati zetu tatu zina zifuatazo katika uga wa maudhui:

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

Tunatumia swala la kulinganisha kutafuta vitambulisho vya hati vyenye neno fulani:

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

Hata hivyo, ikiwa tunatafuta "hadithi" katika uwanja wa maudhui, hatutapata chochote, kwa sababu Faharasa ina maneno asilia tu, sio mashina yao. Ili kufanya utafutaji wa ubora wa juu, unahitaji kusanidi analyzer.

Shamba _score inaonyesha umuhimu. Ikiwa ombi litatekelezwa katika muktadha wa kichujio, basi thamani ya _score itakuwa sawa na 1 kila wakati, ambayo inamaanisha ulinganifu kamili na kichujio.

Wachambuzi

Wachambuzi zinahitajika ili kubadilisha maandishi chanzo kuwa seti ya tokeni.
Wachambuzi hujumuisha moja Kiashiria na hiari kadhaa Vichujio vya Ishara. Tokenizer inaweza kutanguliwa na kadhaa Vichungi vya Char. Viashiria huvunja mfuatano wa chanzo kuwa ishara, kama vile nafasi na herufi za uakifishaji. TokenFilter inaweza kubadilisha tokeni, kufuta au kuongeza mpya, kwa mfano, kuacha tu shina la neno, kuondoa prepositions, kuongeza visawe. CharFilter - hubadilisha kamba nzima ya chanzo, kwa mfano, hupunguza vitambulisho vya html.

ES ina kadhaa wachambuzi wa kawaida. Kwa mfano, analyzer russian.

Hebu kuchukua faida api na hebu tuone jinsi wachambuzi wa kawaida na wa Kirusi wanavyobadilisha kamba "Hadithi za Mapenzi kuhusu kittens":

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

Kichanganuzi cha kawaida kiligawanya kamba kwa nafasi na kubadilisha kila kitu kuwa herufi ndogo, mchanganuzi wa Kirusi aliondoa maneno yasiyo muhimu, akaibadilisha kuwa herufi ndogo na kuacha shina la maneno.

Wacha tuone ni Tokenizer gani, TokenFilters, CharFilters analyzer ya Kirusi hutumia:

{
  "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 ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ */
    }
  }
}

Hebu tueleze analyzer yetu kulingana na Kirusi, ambayo itakata vitambulisho vya html. Wacha tuite chaguo-msingi, kwa sababu kichanganuzi kilicho na jina hili kitatumika kwa chaguo-msingi.

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

Kwanza, vitambulisho vyote vya HTML vitaondolewa kwenye kamba ya chanzo, kisha kiwango cha tokenizer kitaigawanya katika ishara, ishara zinazosababisha zitahamia kwa ndogo, maneno yasiyo na maana yataondolewa, na ishara zilizobaki zitabaki shina la neno.

Kuunda index

Hapo juu tulielezea kichanganuzi chaguo-msingi. Itatumika kwa sehemu zote za kamba. Chapisho letu lina safu ya lebo, kwa hivyo lebo pia zitachakatwa na kichanganuzi. Kwa sababu Tunatafuta machapisho kulingana na tagi, basi tunahitaji kuzima uchanganuzi wa uga wa lebo.

Wacha tuunde blogi ya index2 na kichanganuzi na uchoraji ramani, ambapo uchanganuzi wa uga wa vitambulisho umezimwa:

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

Wacha tuongeze machapisho 3 sawa kwenye faharisi hii (blog2). Nitaacha mchakato huu kwa sababu ... ni sawa na kuongeza hati kwenye faharasa ya blogu.

Utafutaji wa maandishi kamili na usaidizi wa kujieleza

Wacha tuangalie aina nyingine ya ombi:

# Π½Π°ΠΉΠ΄Π΅ΠΌ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρ‹, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… встрСчаСтся слово 'истории'
# 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"
      ]
    }
  }
}'

Kwa sababu Tunatumia kichanganuzi chenye asili ya Kirusi, basi ombi hili litarejesha hati zote, ingawa zina neno 'historia' pekee.

Ombi linaweza kuwa na herufi maalum, kwa mfano:

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

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

marejeo

PS

Ikiwa una nia ya makala-masomo kama hayo, una mawazo ya makala mpya, au una mapendekezo ya ushirikiano, basi nitafurahi kupokea ujumbe katika ujumbe wa kibinafsi au kwa barua pepe. [barua pepe inalindwa].

Chanzo: mapenzi.com