ЕластицсСарцх Басицс

ЕластицсСарцх јС ΠΏΡ€Π΅Ρ‚Ρ€Π°ΠΆΠΈΠ²Π°Ρ‡ са јсон рСст Π°ΠΏΠΈ, који користи Π›ΡƒΡ†Π΅Π½Π΅ ΠΈ написан Π½Π° Јави. Опис свих прСдности ΠΎΠ²ΠΎΠ³ ΠΌΠΎΡ‚ΠΎΡ€Π° доступан јС Π½Π° Π·Π²Π°Π½ΠΈΡ‡Π½ΠΈ ΡΠ°Ρ˜Ρ‚. Π£ Π΄Π°Ρ™Π΅ΠΌ тСксту Ρ›Π΅ΠΌΠΎ ЕластицсСарцх Π½Π°Π·ΠΈΠ²Π°Ρ‚ΠΈ Π•Π‘.

Π‘Π»ΠΈΡ‡Π½ΠΈ ΠΌΠΎΡ‚ΠΎΡ€ΠΈ сС користС Π·Π° слоТСна ΠΏΡ€Π΅Ρ‚Ρ€Π°ΠΆΠΈΠ²Π°ΡšΠ° Ρƒ Π±Π°Π·ΠΈ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Π°Ρ‚Π°. На ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€Π΅Ρ‚Ρ€Π°ΠΆΠΈΠ²Π°ΡšΠ΅ ΡƒΠ·ΠΈΠΌΠ°Ρ˜ΡƒΡ›ΠΈ Ρƒ ΠΎΠ±Π·ΠΈΡ€ ΠΌΠΎΡ€Ρ„ΠΎΠ»ΠΎΠ³ΠΈΡ˜Ρƒ јСзика ΠΈΠ»ΠΈ ΠΏΡ€Π΅Ρ‚Ρ€Π°Π³Ρƒ ΠΏΠΎ гСографским ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°ΠΌΠ°.

Π£ ΠΎΠ²ΠΎΠΌ Ρ‡Π»Π°Π½ΠΊΡƒ Ρ›Ρƒ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΠΈ ΠΎ основама Π•Π‘-Π° Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡ€Π°ΡšΠ° Π±Π»ΠΎΠ³ постова. ΠŸΠΎΠΊΠ°Π·Π°Ρ›Ρƒ Π²Π°ΠΌ ΠΊΠ°ΠΊΠΎ Π΄Π° Ρ„ΠΈΠ»Ρ‚Ρ€ΠΈΡ€Π°Ρ‚Π΅, сортиратС ΠΈ ΠΏΡ€Π΅Ρ‚Ρ€Π°ΠΆΡƒΡ˜Π΅Ρ‚Π΅ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π΅.

Π”Π° Π½Π΅ Π±ΠΈΡ… зависио ΠΎΠ΄ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠ³ систСма, свС Π·Π°Ρ…Ρ‚Π΅Π²Π΅ Ρ›Ρƒ ΡƒΠΏΡƒΡ‚ΠΈΡ‚ΠΈ Π•Π‘-Ρƒ користСћи Π¦Π£Π Π›. ΠŸΠΎΡΡ‚ΠΎΡ˜ΠΈ ΠΈ Π΄ΠΎΠ΄Π°Ρ‚Π°ΠΊ Π·Π° Π“ΠΎΠΎΠ³Π»Π΅ Π¦Ρ…Ρ€ΠΎΠΌΠ΅ Ρ‚Π·Π² смисао.

ВСкст садрТи Π²Π΅Π·Π΅ ΠΊΠ° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜ΠΈ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΈΠ·Π²ΠΎΡ€ΠΈΠΌΠ°. На ΠΊΡ€Π°Ρ˜Ρƒ сС Π½Π°Π»Π°Π·Π΅ Π»ΠΈΠ½ΠΊΠΎΠ²ΠΈ Π·Π° Π±Ρ€Π·ΠΈ приступ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜ΠΈ. Π”Π΅Ρ„ΠΈΠ½ΠΈΡ†ΠΈΡ˜Π΅ Π½Π΅ΠΏΠΎΠ·Π½Π°Ρ‚ΠΈΡ… појмова ΠΌΠΎΠ³Ρƒ сС Π½Π°Ρ›ΠΈ Ρƒ ΠΏΠΎΡ˜ΠΌΠΎΠ²Π½ΠΈΡ†ΠΈ.

Π˜Π½ΡΡ‚Π°Π»ΠΈΡ€Π°ΡšΠ΅ Π•Π‘

Π”Π° бисмо Ρ‚ΠΎ ΡƒΡ€Π°Π΄ΠΈΠ»ΠΈ, ΠΏΡ€Π²ΠΎ Π½Π°ΠΌ јС ΠΏΠΎΡ‚Ρ€Π΅Π±Π½Π° Јава. ДСвСлопСрс ΠΏΡ€Π΅ΠΏΠΎΡ€ΡƒΡ‡ΠΈΡ‚ΠΈ ΠΈΠ½ΡΡ‚Π°Π»ΠΈΡ€Π°Ρ˜Ρ‚Π΅ Јава Π²Π΅Ρ€Π·ΠΈΡ˜Π΅ новијС ΠΎΠ΄ Јава 8 Π°ΠΆΡƒΡ€ΠΈΡ€Π°ΡšΠ° 20 ΠΈΠ»ΠΈ Јава 7 Π°ΠΆΡƒΡ€ΠΈΡ€Π°ΡšΠ° 55.

Π•Π‘ Π΄ΠΈΡΡ‚Ρ€ΠΈΠ±ΡƒΡ†ΠΈΡ˜Π° јС доступна Π½Π° Π²Π΅Π±-ΡΠ°Ρ˜Ρ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ΅Ρ€Π°. Након Ρ€Π°ΡΠΏΠ°ΠΊΠΈΠ²Π°ΡšΠ° Π°Ρ€Ρ…ΠΈΠ²Π΅ ΠΌΠΎΡ€Π°Ρ‚Π΅ ΠΏΠΎΠΊΡ€Π΅Π½ΡƒΡ‚ΠΈ bin/elasticsearch. Π’Π°ΠΊΠΎΡ’Π΅ доступно ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ Π·Π° Π°ΠΏΡ‚ ΠΈ ΠΈΡƒΠΌ... ΠΏΠΎΡΡ‚ΠΎΡ˜ΠΈ Π·Π²Π°Π½ΠΈΡ‡Π½Π° слика Π·Π° Π΄ΠΎΡ†ΠΊΠ΅Ρ€. Π’ΠΈΡˆΠ΅ ΠΎ ΠΈΠ½ΡΡ‚Π°Π»Π°Ρ†ΠΈΡ˜ΠΈ.

Након ΠΈΠ½ΡΡ‚Π°Π»Π°Ρ†ΠΈΡ˜Π΅ ΠΈ ΠΏΠΎΠΊΡ€Π΅Ρ‚Π°ΡšΠ°, Ρ…Π°Ρ˜Π΄Π΅ Π΄Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌΠΎ функционалност:

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

curl -X GET $ES_URL

Π”ΠΎΠ±ΠΈΡ›Π΅ΠΌΠΎ Π½Π΅ΡˆΡ‚ΠΎ ΠΎΠ²Π°ΠΊΠΎ:

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

Π˜Π½Π΄Π΅ΠΊΡΠΈΡ€Π°ΡšΠ΅

Π₯ајдС Π΄Π° Π΄ΠΎΠ΄Π°ΠΌΠΎ пост Ρƒ Π•Π‘:

# Π”ΠΎΠ±Π°Π²ΠΈΠΌ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ 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"
}'

ΠΎΠ΄Π³ΠΎΠ²ΠΎΡ€ сСрвСра:

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

Π•Π‘ аутоматски ΠΊΡ€Π΅ΠΈΡ€Π°Π½ indeks Π±Π»ΠΎΠ³ ΠΈ Π’ΠΈΠΏ ΠΏΠΎΡˆΡ‚Π°. МоТСмо ΠΏΠΎΠ²ΡƒΡ›ΠΈ условну Π°Π½Π°Π»ΠΎΠ³ΠΈΡ˜Ρƒ: индСкс јС Π±Π°Π·Π° ΠΏΠΎΠ΄Π°Ρ‚Π°ΠΊΠ°, Π° Ρ‚ΠΈΠΏ јС Ρ‚Π°Π±Π΅Π»Π° Ρƒ овој Π±Π°Π·ΠΈ ΠΏΠΎΠ΄Π°Ρ‚Π°ΠΊΠ°. Π‘Π²Π°ΠΊΠΈ Ρ‚ΠΈΠΏ ΠΈΠΌΠ° ΡΠ²ΠΎΡ˜Ρƒ ΡˆΠ΅ΠΌΡƒ βˆ’ ΠΊΠ°Ρ€Ρ‚ΠΎΠ³Ρ€Π°Ρ„ΠΈΡ˜Π°, баш ΠΊΠ°ΠΎ Ρ€Π΅Π»Π°Ρ†ΠΈΠΎΠ½Π° Ρ‚Π°Π±Π΅Π»Π°. ΠœΠ°ΠΏΠΈΡ€Π°ΡšΠ΅ сС Π³Π΅Π½Π΅Ρ€ΠΈΡˆΠ΅ аутоматски ΠΊΠ°Π΄Π° сС Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ индСксира:

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

Π£ ΠΎΠ΄Π³ΠΎΠ²ΠΎΡ€Ρƒ сСрвСра, Π΄ΠΎΠ΄Π°ΠΎ сам врСдности ΠΏΠΎΡ™Π° индСксираног Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° Ρƒ ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΌΠ°:

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

Π’Ρ€Π΅Π΄ΠΈ Π½Π°ΠΏΠΎΠΌΠ΅Π½ΡƒΡ‚ΠΈ Π΄Π° Π•Π‘ Π½Π΅ ΠΏΡ€Π°Π²ΠΈ Ρ€Π°Π·Π»ΠΈΠΊΡƒ ΠΈΠ·ΠΌΠ΅Ρ’Ρƒ јСднС врСдности ΠΈ Π½ΠΈΠ·Π° врСдности. На ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠΎΡ™Π΅ наслова Ρ˜Π΅Π΄Π½ΠΎΡΡ‚Π°Π²Π½ΠΎ садрТи наслов, Π° ΠΏΠΎΡ™Π΅ ΠΎΠ·Π½Π°ΠΊΠ° садрТи Π½ΠΈΠ· стрингова, ΠΈΠ°ΠΊΠΎ су ΠΎΠ½ΠΈ прСдстављСни Π½Π° исти Π½Π°Ρ‡ΠΈΠ½ Ρƒ ΠΌΠ°ΠΏΠΈΡ€Π°ΡšΡƒ.
КаснијС Ρ›Π΅ΠΌΠΎ вишС ΠΏΡ€ΠΈΡ‡Π°Ρ‚ΠΈ ΠΎ ΠΌΠ°ΠΏΠΈΡ€Π°ΡšΡƒ.

zahtevi

ΠŸΡ€Π΅ΡƒΠ·ΠΈΠΌΠ°ΡšΠ΅ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° ΠΏΠΎ њСговом Π˜Π”-Ρƒ:

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

Π£ ΠΎΠ΄Π³ΠΎΠ²ΠΎΡ€Ρƒ су сС појавили Π½ΠΎΠ²ΠΈ ΠΊΡ™ΡƒΡ‡Π΅Π²ΠΈ: _version ΠΈ _source. Π“Π΅Π½Π΅Ρ€Π°Π»Π½ΠΎ, сви ΠΊΡ™ΡƒΡ‡Π΅Π²ΠΈ ΠΏΠΎΡ‡Π΅Π² ΠΎΠ΄ _ класификовани су ΠΊΠ°ΠΎ слуТбСни.

ΠšΡ™ΡƒΡ‡ _version ΠΏΡ€ΠΈΠΊΠ°Π·ΡƒΡ˜Π΅ Π²Π΅Ρ€Π·ΠΈΡ˜Ρƒ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°. Π’ΠΎ јС ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΎ Π΄Π° Π±ΠΈ оптимистични ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·Π°ΠΌ Π·Π°ΠΊΡ™ΡƒΡ‡Π°Π²Π°ΡšΠ° Ρ€Π°Π΄ΠΈΠΎ. На ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΆΠ΅Π»ΠΈΠΌΠΎ Π΄Π° ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΠΌΠΎ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ који ΠΈΠΌΠ° Π²Π΅Ρ€Π·ΠΈΡ˜Ρƒ 1. ΠŸΡ€Π΅Π΄Π°Ρ˜Π΅ΠΌΠΎ измСњСни Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ ΠΈ ΠΎΠ·Π½Π°Ρ‡Π°Π²Π°ΠΌΠΎ Π΄Π° јС ΠΎΠ²ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° са Π²Π΅Ρ€Π·ΠΈΡ˜ΠΎΠΌ 1. Ако јС Π½Π΅ΠΊΠΎ Π΄Ρ€ΡƒΠ³ΠΈ Ρ‚Π°ΠΊΠΎΡ’Π΅ ΡƒΡ€Π΅Ρ’ΠΈΠ²Π°ΠΎ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ са Π²Π΅Ρ€Π·ΠΈΡ˜ΠΎΠΌ 1 ΠΈ ΠΏΠΎΠ΄Π½Π΅ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅ ΠΏΡ€Π΅ нас, ΠΎΠ½Π΄Π° Π•Π‘ Π½Π΅Ρ›Π΅ ΠΏΡ€ΠΈΡ…Π²Π°Ρ‚ΠΈΡ‚ΠΈ нашС ΠΈΠ·ΠΌΠ΅Π½Π΅, Ρ˜Π΅Ρ€ ΠΎΠ½ Ρ‡ΡƒΠ²Π° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ са Π²Π΅Ρ€Π·ΠΈΡ˜ΠΎΠΌ 2.

ΠšΡ™ΡƒΡ‡ _source садрТи Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ који смо индСксирали. Π•Π‘ Π½Π΅ користи ΠΎΠ²Ρƒ врСдност Π·Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡ˜Π΅ ΠΏΡ€Π΅Ρ‚Ρ€Π°ΠΆΠΈΠ²Π°ΡšΠ° Ρ˜Π΅Ρ€ Π—Π° ΠΏΡ€Π΅Ρ‚Ρ€Π°ΠΆΠΈΠ²Π°ΡšΠ΅ сС користС индСкси. Π”Π° ΡƒΡˆΡ‚Π΅Π΄ΠΈ простор, Π•Π‘ ΡΠΊΠ»Π°Π΄ΠΈΡˆΡ‚ΠΈ ΠΊΠΎΠΌΠΏΡ€ΠΈΠΌΠΎΠ²Π°Π½ΠΈ ΠΈΠ·Π²ΠΎΡ€Π½ΠΈ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚. Ако Π½Π°ΠΌ јС ΠΏΠΎΡ‚Ρ€Π΅Π±Π°Π½ само ΠΈΠ΄, Π° Π½Π΅ Ρ†Π΅ΠΎ ΠΈΠ·Π²ΠΎΡ€Π½ΠΈ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚, ΠΎΠ½Π΄Π° ΠΌΠΎΠΆΠ΅ΠΌΠΎ Π΄Π° ΠΎΠ½Π΅ΠΌΠΎΠ³ΡƒΡ›ΠΈΠΌΠΎ ΠΈΠ·Π²ΠΎΡ€Π½ΠΎ ΡΠΊΠ»Π°Π΄ΠΈΡˆΡ‚Π΅.

Ако Π½Π°ΠΌ нису ΠΏΠΎΡ‚Ρ€Π΅Π±Π½Π΅ Π΄ΠΎΠ΄Π°Ρ‚Π½Π΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ˜Π΅, ΠΌΠΎΠΆΠ΅ΠΌΠΎ Π΄ΠΎΠ±ΠΈΡ‚ΠΈ само ΡΠ°Π΄Ρ€ΠΆΠ°Ρ˜ _соурцС:

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

Π’Π°ΠΊΠΎΡ’Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΈΠ·Π°Π±Π΅Ρ€Π΅Ρ‚Π΅ само ΠΎΠ΄Ρ€Π΅Ρ’Π΅Π½Π° ΠΏΠΎΡ™Π°:

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

Π₯ајдС Π΄Π° индСксирамо још Π½Π΅ΠΊΠΎΠ»ΠΈΠΊΠΎ постова ΠΈ ΠΏΠΎΠΊΡ€Π΅Π½Π΅ΠΌΠΎ слоТСнијС ΡƒΠΏΠΈΡ‚Π΅.

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

Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ°

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

Π˜Π·Π°Π±Ρ€Π°Π»ΠΈ смо послСдњи пост. size ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π°Π²Π° Π±Ρ€ΠΎΡ˜ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Π°Ρ‚Π° који сС ΠΈΠ·Π΄Π°Ρ˜Ρƒ. total ΠΏΡ€ΠΈΠΊΠ°Π·ΡƒΡ˜Π΅ ΡƒΠΊΡƒΠΏΠ°Π½ Π±Ρ€ΠΎΡ˜ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Π°Ρ‚Π° који ΠΎΠ΄Π³ΠΎΠ²Π°Ρ€Π°Ρ˜Ρƒ Π·Π°Ρ…Ρ‚Π΅Π²Ρƒ. sort Ρƒ ΠΈΠ·Π»Π°Π·Ρƒ садрТи Π½ΠΈΠ· Ρ†Π΅Π»ΠΈΡ… Π±Ρ€ΠΎΡ˜Π΅Π²Π° ΠΏΠΎ којима сС Π²Ρ€ΡˆΠΈ ΡΠΎΡ€Ρ‚ΠΈΡ€Π°ΡšΠ΅. ОнС. Π΄Π°Ρ‚ΡƒΠΌ јС ΠΏΡ€Π΅Ρ‚Π²ΠΎΡ€Π΅Π½ Ρƒ Ρ†Π΅ΠΎ Π±Ρ€ΠΎΡ˜. Π’ΠΈΡˆΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ˜Π° ΠΎ ΡΠΎΡ€Ρ‚ΠΈΡ€Π°ΡšΡƒ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΠ½Π°Ρ›ΠΈ Ρƒ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π°.

Π€ΠΈΠ»Ρ‚Π΅Ρ€ΠΈ ΠΈ ΡƒΠΏΠΈΡ‚ΠΈ

Π•Π‘ ΠΎΠ΄ Π²Π΅Ρ€Π·ΠΈΡ˜Π΅ 2 Π½Π΅ ΠΏΡ€Π°Π²ΠΈ Ρ€Π°Π·Π»ΠΈΠΊΡƒ ΠΈΠ·ΠΌΠ΅Ρ’Ρƒ Ρ„ΠΈΠ»Ρ‚Π΅Ρ€Π° ΠΈ ΡƒΠΏΠΈΡ‚Π° ΡƒΠ²ΠΎΠ΄ΠΈ сС појам контСкста.
ΠšΠΎΠ½Ρ‚Π΅ΠΊΡΡ‚ ΡƒΠΏΠΈΡ‚Π° сС Ρ€Π°Π·Π»ΠΈΠΊΡƒΡ˜Π΅ ΠΎΠ΄ контСкста Ρ„ΠΈΠ»Ρ‚Π΅Ρ€Π° ΠΏΠΎ Ρ‚ΠΎΠΌΠ΅ ΡˆΡ‚ΠΎ ΡƒΠΏΠΈΡ‚ Π³Π΅Π½Π΅Ρ€ΠΈΡˆΠ΅ _сцорС ΠΈ нијС ΠΊΠ΅ΡˆΠΈΡ€Π°Π½. КаснијС Ρ›Ρƒ Π²Π°ΠΌ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΠΈ ΡˆΡ‚Π° јС _сцорС.

Π€ΠΈΠ»Ρ‚Ρ€ΠΈΡ€Π°Ρ˜Ρ‚Π΅ ΠΏΠΎ Π΄Π°Ρ‚ΡƒΠΌΡƒ

ΠšΠΎΡ€ΠΈΡΡ‚ΠΈΠΌΠΎ Π·Π°Ρ…Ρ‚Π΅Π² Π΄ΠΎΠΌΠ΅Ρ‚ Ρƒ контСксту Ρ„ΠΈΠ»Ρ‚Π΅Ρ€Π°:

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

Π€ΠΈΠ»Ρ‚Ρ€ΠΈΡ€Π°Ρ˜Ρ‚Π΅ ΠΏΠΎ ΠΎΠ·Π½Π°ΠΊΠ°ΠΌΠ°

ΠšΠΎΡ€ΠΈΡΡ‚ΠΈΠΌΠΎ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ ΡƒΠΏΠΈΡ‚ Π·Π° Ρ‚Ρ€Π°ΠΆΠ΅ΡšΠ΅ Π˜Π”-ΠΎΠ²Π° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Π°Ρ‚Π° који садрТС Π΄Π°Ρ‚Ρƒ Ρ€Π΅Ρ‡:

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

ΠŸΡ€Π΅Ρ‚Ρ€Π°ΠΆΠΈΠ²Π°ΡšΠ΅ Ρ†Π΅Π»ΠΎΠ³ тСкста

Π’Ρ€ΠΈ наша Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° садрТС слСдСћС Ρƒ ΠΏΠΎΡ™Ρƒ ΡΠ°Π΄Ρ€ΠΆΠ°Ρ˜Π°:

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

ΠšΠΎΡ€ΠΈΡΡ‚ΠΈΠΌΠΎ ΡƒΠΏΠΈΡ‚ Π·Π° ΠΏΠΎΠ΄ΡƒΠ΄Π°Ρ€Π°ΡšΠ΅ Π·Π° Ρ‚Ρ€Π°ΠΆΠ΅ΡšΠ΅ Π˜Π”-ΠΎΠ²Π° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Π°Ρ‚Π° који садрТС Π΄Π°Ρ‚Ρƒ Ρ€Π΅Ρ‡:

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

ΠœΠ΅Ρ’ΡƒΡ‚ΠΈΠΌ, Π°ΠΊΠΎ Ρ‚Ρ€Π°ΠΆΠΈΠΌΠΎ β€žΠΏΡ€ΠΈΡ‡Π΅β€œ Ρƒ ΠΏΠΎΡ™Ρƒ ΡΠ°Π΄Ρ€ΠΆΠ°Ρ˜Π°, Π½Π΅Ρ›Π΅ΠΌΠΎ Π½ΠΈΡˆΡ‚Π° ΠΏΡ€ΠΎΠ½Π°Ρ›ΠΈ, Ρ˜Π΅Ρ€ ИндСкс садрТи само ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»Π½Π΅ Ρ€Π΅Ρ‡ΠΈ, Π½Π΅ ΠΈ ΡšΠΈΡ…ΠΎΠ²Π΅ основС. Π”Π° бистС ΠΈΠ·Π²Ρ€ΡˆΠΈΠ»ΠΈ ΠΊΠ²Π°Π»ΠΈΡ‚Π΅Ρ‚Π½Ρƒ ΠΏΡ€Π΅Ρ‚Ρ€Π°Π³Ρƒ, ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΎ јС Π΄Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡˆΠ΅Ρ‚Π΅ Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€.

ΠŸΠΎΡ™Π΅ _score СмисијС рСлСвантност. Ако сС Π·Π°Ρ…Ρ‚Π΅Π² ΠΈΠ·Π²Ρ€ΡˆΠ°Π²Π° Ρƒ контСксту Ρ„ΠΈΠ»Ρ‚Π΅Ρ€Π°, ΠΎΠ½Π΄Π° Ρ›Π΅ врСдност _сцорС ΡƒΠ²Π΅ΠΊ Π±ΠΈΡ‚ΠΈ јСднака 1, ΡˆΡ‚ΠΎ Π·Π½Π°Ρ‡ΠΈ ΠΏΠΎΡ‚ΠΏΡƒΠ½ΠΎ ΠΏΠΎΠ΄ΡƒΠ΄Π°Ρ€Π°ΡšΠ΅ са Ρ„ΠΈΠ»Ρ‚Π΅Ρ€ΠΎΠΌ.

Анализатори

Анализатори ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΈ су Π·Π° ΠΏΡ€Π΅Ρ‚Π²Π°Ρ€Π°ΡšΠ΅ ΠΈΠ·Π²ΠΎΡ€Π½ΠΎΠ³ тСкста Ρƒ скуп Ρ‚ΠΎΠΊΠ΅Π½Π°.
Анализатори сС ΡΠ°ΡΡ‚ΠΎΡ˜Π΅ ΠΎΠ΄ јСдног Π’ΠΎΠΊΠ΅Π½ΠΈΠ·Π΅Ρ€ ΠΈ Π½Π΅ΠΊΠΎΠ»ΠΈΠΊΠΎ ΠΎΠΏΡ†ΠΈΠΎΠ½ΠΈΡ… ВокСнЀилтСрс. Π’ΠΎΠΊΠ΅Π½ΠΈΠ·Π΅Ρ€-Ρƒ ΠΌΠΎΠΆΠ΅ ΠΏΡ€Π΅Ρ‚Ρ…ΠΎΠ΄ΠΈΡ‚ΠΈ Π½Π΅ΠΊΠΎΠ»ΠΈΠΊΠΎ ЦхарЀилтСрс. Π’ΠΎΠΊΠ΅Π½ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΈ Ρ€Π°Π·Π±ΠΈΡ˜Π°Ρ˜Ρƒ ΠΈΠ·Π²ΠΎΡ€Π½ΠΈ Π½ΠΈΠ· Π½Π° Ρ‚ΠΎΠΊΠ΅Π½Π΅, ΠΊΠ°ΠΎ ΡˆΡ‚ΠΎ су Ρ€Π°Π·ΠΌΠ°Ρ†ΠΈ ΠΈ Π·Π½Π°ΠΊΠΎΠ²ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡƒΠ½ΠΊΡ†ΠΈΡ˜Π΅. Π’ΠΎΠΊΠ΅Π½Π€ΠΈΠ»Ρ‚Π΅Ρ€ ΠΌΠΎΠΆΠ΅ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚ΠΈ Ρ‚ΠΎΠΊΠ΅Π½Π΅, избрисати ΠΈΠ»ΠΈ Π΄ΠΎΠ΄Π°Ρ‚ΠΈ Π½ΠΎΠ²Π΅, Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€, оставити само ΠΊΠΎΡ€Π΅Π½ Ρ€Π΅Ρ‡ΠΈ, ΡƒΠΊΠ»ΠΎΠ½ΠΈΡ‚ΠΈ ΠΏΡ€Π΅Π΄Π»ΠΎΠ³Π΅, Π΄ΠΎΠ΄Π°Ρ‚ΠΈ синонимС. Π¦Ρ…Π°Ρ€Π€ΠΈΠ»Ρ‚Π΅Ρ€ - мСња Ρ†Π΅ΠΎ ΠΈΠ·Π²ΠΎΡ€Π½ΠΈ стринг, Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€, исСчС Ρ…Ρ‚ΠΌΠ» ΠΎΠ·Π½Π°ΠΊΠ΅.

Π•Π‘ ΠΈΠΌΠ° Π½Π΅ΠΊΠΎΠ»ΠΈΠΊΠΎ стандардни Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΈ. На ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ руски.

Π₯ајдС Π΄Π° искористимо прСдност АПИ ΠΈ Π΄Π° Π²ΠΈΠ΄ΠΈΠΌΠΎ ΠΊΠ°ΠΊΠΎ стандардни ΠΈ руски Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΈ Ρ‚Ρ€Π°Π½ΡΡ„ΠΎΡ€ΠΌΠΈΡˆΡƒ Π½ΠΈΠ· β€žΠ‘ΠΌΠ΅ΡˆΠ½Π΅ ΠΏΡ€ΠΈΡ‡Π΅ ΠΎ ΠΌΠ°Ρ‡ΠΈΡ›ΠΈΠΌΠ°β€œ:

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

Π‘Ρ‚Π°Π½Π΄Π°Ρ€Π΄Π½ΠΈ Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ јС ΠΏΠΎΠ΄Π΅Π»ΠΈΠΎ стринг ΠΏΠΎ Ρ€Π°Π·ΠΌΠ°Ρ†ΠΈΠΌΠ° ΠΈ ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΎΠ²Π°ΠΎ свС Ρƒ ΠΌΠ°Π»Π° слова, руски Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ јС ΡƒΠΊΠ»ΠΎΠ½ΠΈΠΎ Π½Π΅Π²Π°ΠΆΠ½Π΅ Ρ€Π΅Ρ‡ΠΈ, ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΎΠ²Π°ΠΎ Π³Π° Ρƒ ΠΌΠ°Π»Π° слова ΠΈ оставио ΠΊΠΎΡ€Π΅Π½ Ρ€Π΅Ρ‡ΠΈ.

Π₯ајдС Π΄Π° Π²ΠΈΠ΄ΠΈΠΌΠΎ којС Π’ΠΎΠΊΠ΅Π½ΠΈΠ·Π΅Ρ€, ВокСнЀилтСрс, ЦхарЀилтСрс користи руски Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€:

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

Π₯ајдС Π΄Π° опишСмо наш Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ заснован Π½Π° руском, који Ρ›Π΅ ΠΈΠ·Ρ€Π΅Π·Π°Ρ‚ΠΈ Ρ…Ρ‚ΠΌΠ» ΠΎΠ·Π½Π°ΠΊΠ΅. Назовимо Ρ‚ΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π½ΠΈΠΌ, Ρ˜Π΅Ρ€ Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ са ΠΎΠ²ΠΈΠΌ ΠΈΠΌΠ΅Π½ΠΎΠΌ Ρ›Π΅ сС ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π½ΠΎ користити.

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

ΠŸΡ€Π²ΠΎ, свС Π₯Π’ΠœΠ› ΠΎΠ·Π½Π°ΠΊΠ΅ Ρ›Π΅ Π±ΠΈΡ‚ΠΈ ΡƒΠΊΠ»ΠΎΡšΠ΅Π½Π΅ ΠΈΠ· ΠΈΠ·Π²ΠΎΡ€Π½ΠΎΠ³ Π½ΠΈΠ·Π°, Π·Π°Ρ‚ΠΈΠΌ Ρ›Π΅ Π³Π° стандард Π·Π° Ρ‚ΠΎΠΊΠ΅Π½ΠΈΠ·Π΅Ρ€ ΠΏΠΎΠ΄Π΅Π»ΠΈΡ‚ΠΈ Π½Π° Ρ‚ΠΎΠΊΠ΅Π½Π΅, Ρ€Π΅Π·ΡƒΠ»Ρ‚ΡƒΡ˜ΡƒΡ›ΠΈ Ρ‚ΠΎΠΊΠ΅Π½ΠΈ Ρ›Π΅ сС прСмСстити Π½Π° ΠΌΠ°Π»Π° слова, Π±Π΅Π·Π½Π°Ρ‡Π°Ρ˜Π½Π΅ Ρ€Π΅Ρ‡ΠΈ Ρ›Π΅ Π±ΠΈΡ‚ΠΈ ΡƒΠΊΠ»ΠΎΡšΠ΅Π½Π΅, Π° прСостали Ρ‚ΠΎΠΊΠ΅Π½ΠΈ Ρ›Π΅ остати основа Ρ€Π΅Ρ‡ΠΈ.

ΠšΡ€Π΅ΠΈΡ€Π°ΡšΠ΅ индСкса

Изнад смо описали ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π½ΠΈ Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€. ΠŸΡ€ΠΈΠΌΠ΅ΡšΠΈΠ²Π°Ρ›Π΅ сС Π½Π° сва ΠΏΠΎΡ™Π° стрингова. Наш пост садрТи Π½ΠΈΠ· ΠΎΠ·Π½Π°ΠΊΠ°, Ρ‚Π°ΠΊΠΎ Π΄Π° Ρ›Π΅ ΠΈ Ρ‚Π°Π³ΠΎΠ²ΠΈ Π±ΠΈΡ‚ΠΈ ΠΎΠ±Ρ€Π°Ρ’Π΅Π½ΠΈ ΠΎΠ΄ странС Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π°. ΠˆΠ΅Ρ€ Π’Ρ€Π°ΠΆΠΈΠΌΠΎ постовС ΠΏΠΎ Ρ‚Π°Ρ‡Π½ΠΎΠΌ ΠΏΠΎΠ΄ΡƒΠ΄Π°Ρ€Π°ΡšΡƒ са ΠΎΠ·Π½Π°ΠΊΠΎΠΌ, Π° Π·Π°Ρ‚ΠΈΠΌ ΠΌΠΎΡ€Π°ΠΌΠΎ Π΄Π° ΠΎΠ½Π΅ΠΌΠΎΠ³ΡƒΡ›ΠΈΠΌΠΎ Π°Π½Π°Π»ΠΈΠ·Ρƒ Π·Π° ΠΏΠΎΡ™Π΅ Π·Π° ΠΎΠ·Π½Π°ΠΊΠ΅.

Π₯ајдС Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌΠΎ индСксни Π±Π»ΠΎΠ³2 са Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠΌ ΠΈ ΠΌΠ°ΠΏΠΈΡ€Π°ΡšΠ΅ΠΌ, Ρƒ којСм јС ΠΎΠ½Π΅ΠΌΠΎΠ³ΡƒΡ›Π΅Π½Π° Π°Π½Π°Π»ΠΈΠ·Π° ΠΏΠΎΡ™Π° ΠΎΠ·Π½Π°ΠΊΠ°:

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

Π₯ајдС Π΄Π° Π΄ΠΎΠ΄Π°ΠΌΠΎ иста 3 поста Ρƒ овај индСкс (Π±Π»ΠΎΠ³2). Π˜Π·ΠΎΡΡ‚Π°Π²ΠΈΡ›Ρƒ овај процСс Ρ˜Π΅Ρ€... слично јС Π΄ΠΎΠ΄Π°Π²Π°ΡšΡƒ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Π°Ρ‚Π° Ρƒ индСкс Π±Π»ΠΎΠ³Π°.

ΠŸΡ€Π΅Ρ‚Ρ€Π°ΠΆΠΈΠ²Π°ΡšΠ΅ Ρ†Π΅Π»ΠΎΠ³ тСкста са ΠΏΠΎΠ΄Ρ€ΡˆΠΊΠΎΠΌ Π·Π° ΠΈΠ·Ρ€Π°Π·Π΅

Π₯ајдС Π΄Π° ΠΏΠΎΠ³Π»Π΅Π΄Π°ΠΌΠΎ Π΄Ρ€ΡƒΠ³Ρƒ врсту Π·Π°Ρ…Ρ‚Π΅Π²Π°:

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

ΠˆΠ΅Ρ€ ΠšΠΎΡ€ΠΈΡΡ‚ΠΈΠΌΠΎ Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ са руским ΠΏΠΎΡ€Π΅ΠΊΠ»ΠΎΠΌ, ΠΎΠ½Π΄Π° Ρ›Π΅ овај Π·Π°Ρ…Ρ‚Π΅Π² Π²Ρ€Π°Ρ‚ΠΈΡ‚ΠΈ свС Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π΅, ΠΈΠ°ΠΊΠΎ садрТС само Ρ€Π΅Ρ‡ β€žΠΈΡΡ‚ΠΎΡ€ΠΈΡ˜Π°β€œ.

Π—Π°Ρ…Ρ‚Π΅Π² ΠΌΠΎΠΆΠ΅ Π΄Π° садрТи посСбнС Π·Π½Π°ΠΊΠΎΠ²Π΅, Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

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

Бинтакса Π·Π°Ρ…Ρ‚Π΅Π²Π°:

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

Ρ€Π΅Ρ„Π΅Ρ€Π΅Π½Ρ†Π΅

PS

Ако стС заинтСрСсовани Π·Π° сличнС Ρ‡Π»Π°Π½ΠΊΠ΅-Π»Π΅ΠΊΡ†ΠΈΡ˜Π΅, ΠΈΠΌΠ°Ρ‚Π΅ идСјС Π·Π° Π½ΠΎΠ²Π΅ Ρ‡Π»Π°Π½ΠΊΠ΅, ΠΈΠ»ΠΈ ΠΈΠΌΠ°Ρ‚Π΅ ΠΏΡ€Π΅Π΄Π»ΠΎΠ³Π΅ Π·Π° ΡΠ°Ρ€Π°Π΄ΡšΡƒ, Π±ΠΈΡ›Π΅ ΠΌΠΈ Π΄Ρ€Π°Π³ΠΎ Π΄Π° добијСм ΠΏΠΎΡ€ΡƒΠΊΡƒ Ρƒ Π»ΠΈΡ‡Π½ΠΎΡ˜ ΠΏΠΎΡ€ΡƒΡ†ΠΈ ΠΈΠ»ΠΈ Π½Π° мСјл [Π΅ΠΌΠ°ΠΈΠ» Π·Π°ΡˆΡ‚ΠΈΡ›Π΅Π½].

Π˜Π·Π²ΠΎΡ€: Π²Π²Π².Ρ…Π°Π±Ρ€.Ρ†ΠΎΠΌ