Hanfodion Elasticsearch

Mae Elasticsearch yn beiriant chwilio gyda json rest api, yn defnyddio Lucene ac wedi'i ysgrifennu yn Java. Mae disgrifiad o holl fanteision yr injan hon ar gael yn gwefan swyddogol. Yn yr hyn sy'n dilyn byddwn yn cyfeirio at Elasticsearch fel ES.

Defnyddir peiriannau tebyg ar gyfer chwiliadau cymhleth mewn cronfa ddata o ddogfennau. Er enghraifft, chwilio gan gymryd i ystyriaeth morffoleg yr iaith neu chwilio yn Γ΄l cyfesurynnau geo.

Yn yr erthygl hon byddaf yn siarad am hanfodion ES gan ddefnyddio'r enghraifft o fynegeio postiadau blog. Byddaf yn dangos i chi sut i hidlo, didoli a chwilio dogfennau.

Er mwyn peidio Γ’ dibynnu ar y system weithredu, byddaf yn gwneud pob cais i ES gan ddefnyddio CURL. Mae yna hefyd ategyn ar gyfer google chrome o'r enw synnwyr.

Mae'r testun yn cynnwys dolenni i ddogfennaeth a ffynonellau eraill. Ar y diwedd mae dolenni ar gyfer mynediad cyflym i'r ddogfennaeth. Gellir dod o hyd i ddiffiniadau o dermau anghyfarwydd yn geirfaoedd.

Gosod ES

I wneud hyn, mae angen Java arnom yn gyntaf. Datblygwyr argymell gosod fersiynau Java newyddach na Java 8 update 20 neu Java 7 update 55.

Mae'r dosbarthiad ES ar gael yn safle datblygwr. Ar Γ΄l dadbacio'r archif mae angen i chi redeg bin/elasticsearch. Ar gael hefyd pecynnau ar gyfer apt a yum. Mae yna delwedd swyddogol ar gyfer docwr. Mwy am osod.

Ar Γ΄l gosod a lansio, gadewch i ni wirio'r ymarferoldeb:

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

curl -X GET $ES_URL

Byddwn yn derbyn rhywbeth fel hyn:

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

Mynegeio

Gadewch i ni ychwanegu post at 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"
}'

ymateb gweinydd:

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

ES wedi'i greu'n awtomatig mynegai blog a math post. Gallwn lunio cyfatebiaeth amodol: cronfa ddata yw mynegai, a math yw tabl yn y gronfa ddata hon. Mae gan bob math ei gynllun ei hun βˆ’ mapio, yn union fel tabl perthynol. Cynhyrchir mapio yn awtomatig pan fydd y ddogfen yn cael ei mynegeio:

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

Yn ymateb y gweinydd, ychwanegais werthoedd meysydd y ddogfen fynegeiedig yn y sylwadau:

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

Mae'n werth nodi nad yw ES yn gwahaniaethu rhwng un gwerth ac amrywiaeth o werthoedd. Er enghraifft, mae'r maes teitl yn syml yn cynnwys teitl, ac mae'r maes tagiau yn cynnwys amrywiaeth o linynnau, er eu bod yn cael eu cynrychioli yn yr un modd wrth fapio.
Byddwn yn siarad mwy am fapio yn nes ymlaen.

Ceisiadau

Adalw dogfen trwy ei ID:

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

Ymddangosodd allweddi newydd yn yr ymateb: _version ΠΈ _source. Yn gyffredinol, mae pob allwedd yn dechrau gyda _ yn cael eu dosbarthu fel swyddogol.

Allwedd _version yn dangos fersiwn y ddogfen. Mae ei angen er mwyn i'r mecanwaith cloi optimistaidd weithio. Er enghraifft, rydym am newid dogfen sydd Γ’ fersiwn 1. Rydym yn cyflwyno'r ddogfen wedi'i newid ac yn nodi mai golygiad o ddogfen gyda fersiwn 1 yw hon. Os yw rhywun arall hefyd wedi golygu dogfen gyda fersiwn 1 ac wedi cyflwyno newidiadau o'n blaenau, yna Ni fydd ES yn derbyn ein newidiadau, oherwydd mae'n storio'r ddogfen gyda fersiwn 2.

Allwedd _source yn cynnwys y ddogfen a fynegwyd gennym. Nid yw ES yn defnyddio'r gwerth hwn ar gyfer gweithrediadau chwilio oherwydd Defnyddir mynegeion ar gyfer chwilio. Er mwyn arbed lle, mae ES yn storio dogfen ffynhonnell gywasgedig. Os mai dim ond yr id sydd ei angen arnom, ac nid y ddogfen ffynhonnell gyfan, yna gallwn analluogi storio ffynhonnell.

Os nad oes angen gwybodaeth ychwanegol arnom, dim ond cynnwys _source y gallwn ei gael:

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

Gallwch hefyd ddewis rhai meysydd yn unig:

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

Gadewch i ni fynegeio ychydig mwy o bostiadau a rhedeg ymholiadau mwy cymhleth.

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

Trefnu

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

Dewison ni'r post olaf. size cyfyngu ar nifer y dogfennau i'w cyhoeddi. total yn dangos cyfanswm nifer y dogfennau sy'n cyfateb i'r cais. sort yn yr allbwn yn cynnwys amrywiaeth o gyfanrifau ar gyfer didoli yn cael ei berfformio. Y rhai. troswyd y dyddiad yn gyfanrif. Mae rhagor o wybodaeth am ddidoli ar gael yn dogfennaeth.

Hidlau ac ymholiadau

ES gan nad yw fersiwn 2 yn gwahaniaethu rhwng hidlwyr ac ymholiadau, yn lle hynny cyflwynir y cysyniad o gyd-destunau.
Mae cyd-destun ymholiad yn wahanol i gyd-destun hidlydd gan fod yr ymholiad yn cynhyrchu _score ac nid yw wedi'i storio. Byddaf yn dangos i chi beth yw _score yn ddiweddarach.

Hidlo yn Γ΄l dyddiad

Rydym yn defnyddio'r cais ystod yng nghyd-destun hidlydd:

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

Hidlo yn Γ΄l tagiau

Rydym yn defnyddio ymholiad tymor i chwilio am ddulliau adnabod dogfennau sy'n cynnwys gair penodol:

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

Chwiliad testun llawn

Mae tair o'n dogfennau yn cynnwys y canlynol yn y maes cynnwys:

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

Rydym yn defnyddio ymholiad cyfatebol i chwilio am ddulliau adnabod dogfennau sy'n cynnwys gair penodol:

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

Fodd bynnag, os chwiliwn am β€œstraeon” yn y maes cynnwys, ni fyddwn yn dod o hyd i unrhyw beth, oherwydd Dim ond y geiriau gwreiddiol sydd yn y mynegai, nid eu coesynnau. Er mwyn gwneud chwiliad o ansawdd uchel, mae angen i chi ffurfweddu'r dadansoddwr.

Maes _score sioeau perthnasedd. Os gweithredir y cais mewn cyd-destun hidlydd, yna bydd y gwerth _score bob amser yn hafal i 1, sy'n golygu cyfatebiaeth gyflawn i'r hidlydd.

Dadansoddwyr

Dadansoddwyr sydd eu hangen i drosi'r testun ffynhonnell yn set o docynnau.
Mae dadansoddwyr yn cynnwys un Tocynydd a sawl dewisol TokenFilters. Gall Tokenizer gael ei ragflaenu gan sawl un Hidlyddion Char. Mae tocynwyr yn torri'r llinyn ffynhonnell yn docynnau, fel bylchau a nodau atalnodi. Gall TokenFilter newid tocynnau, dileu neu ychwanegu rhai newydd, er enghraifft, gadael coesyn y gair yn unig, tynnu arddodiaid, ychwanegu cyfystyron. CharFilter - yn newid y llinyn ffynhonnell gyfan, er enghraifft, yn torri allan tagiau html.

Mae gan ES sawl un dadansoddwyr safonol. Er enghraifft, dadansoddwr Rwsia.

Gadewch i ni gymryd mantais api a gadewch i ni weld sut mae'r dadansoddwyr safonol a Rwsiaidd yn trawsnewid y llinyn β€œStraeon doniol am gathod bach”:

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

Holltodd y dadansoddwr safonol y llinyn Γ’ bylchau a throsi popeth i lythrennau bach, tynnodd y dadansoddwr Rwsiaidd eiriau dibwys, ei drosi i briflythrennau a gadael coesyn y geiriau.

Gadewch i ni weld pa Tokenizer, TokenFilters, CharFilters y mae'r dadansoddwr Rwsia yn eu defnyddio:

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

Gadewch i ni ddisgrifio ein dadansoddwr yn seiliedig ar Rwsieg, a fydd yn torri allan tagiau html. Gadewch i ni ei alw'n ddiofyn, oherwydd bydd dadansoddwr gyda'r enw hwn yn cael ei ddefnyddio yn ddiofyn.

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

Yn gyntaf, bydd yr holl dagiau HTML yn cael eu tynnu o'r llinyn ffynhonnell, yna bydd y safon tokenizer yn ei rannu'n docynnau, bydd y tocynnau canlyniadol yn symud i lythrennau bach, bydd geiriau di-nod yn cael eu tynnu, a bydd y tocynnau sy'n weddill yn aros yn goesyn y gair.

Creu mynegai

Uchod fe wnaethom ddisgrifio'r dadansoddwr rhagosodedig. Bydd yn berthnasol i bob maes llinyn. Mae ein post yn cynnwys amrywiaeth o dagiau, felly bydd y tagiau hefyd yn cael eu prosesu gan y dadansoddwr. Achos Rydyn ni'n chwilio am bostiadau sy'n cyfateb yn union i dag, yna mae angen i ni analluogi dadansoddiad ar gyfer y maes tagiau.

Gadewch i ni greu blog mynegai2 gyda dadansoddwr a mapio, lle mae'r dadansoddiad o'r maes tagiau wedi'i analluogi:

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

Gadewch i ni ychwanegu'r un 3 neges i'r mynegai hwn (blog2). Byddaf yn hepgor y broses hon oherwydd... mae'n debyg i ychwanegu dogfennau at fynegai'r blogiau.

Chwiliad testun llawn gyda chefnogaeth mynegiant

Gadewch i ni edrych ar fath arall o gais:

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

Achos Rydym yn defnyddio dadansoddwr gyda choesyn Rwsieg, yna bydd y cais hwn yn dychwelyd yr holl ddogfennau, er eu bod yn cynnwys y gair 'hanes' yn unig.

Gall y cais gynnwys nodau arbennig, er enghraifft:

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

Cystrawen cais:

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

cyfeiriadau

PS

Os oes gennych ddiddordeb mewn gwersi erthygl o'r fath, os oes gennych syniadau ar gyfer erthyglau newydd neu os oes gennych gynigion ar gyfer cydweithredu, byddaf yn falch o dderbyn neges bersonol neu drwy'r post m.kuzmin+habr@darkleaf.ru.

Ffynhonnell: hab.com

Prynu gwesteio dibynadwy ar gyfer gwefannau sydd Γ’ diogelwch DDoS, gweinyddwyr VPS VDS πŸ”₯ Prynu cynnal gwefannau dibynadwy gyda diogelwch DDoS, gweinyddion VPS VDS | ProHoster