Основи на Elasticsearch

Elasticsearch Π΅ ΠΏΡ€Π΅Π±Π°Ρ€ΡƒΠ²Π°Ρ‡ со json rest api, кој користи Lucene ΠΈ Π΅ напишан Π½Π° Java. Опис Π½Π° ситС прСдности Π½Π° овој ΠΌΠΎΡ‚ΠΎΡ€ Π΅ достапСн Π½Π° ΠΎΡ„ΠΈΡ†ΠΈΡ˜Π°Π»Π½Π° Π²Π΅Π±-страница. Π’ΠΎ ΠΎΠ½Π° ΡˆΡ‚ΠΎ слСди ќС сС однСсувамС Π½Π° Elasticsearch ΠΊΠ°ΠΊΠΎ ES.

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

Π’ΠΎ ΠΎΠ²Π°Π° ΡΡ‚Π°Ρ‚ΠΈΡ˜Π° ќС Π·Π±ΠΎΡ€ΡƒΠ²Π°ΠΌ Π·Π° основитС Π½Π° ES ΠΊΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ Π³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΡ‚ Π·Π° ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡ€Π°ΡšΠ΅ Π½Π° објави Π½Π° Π±Π»ΠΎΠ³ΠΎΠ²ΠΈ. ЌС Π²ΠΈ ΠΏΠΎΠΊΠ°ΠΆΠ°ΠΌ ΠΊΠ°ΠΊΠΎ Π΄Π° Ρ„ΠΈΠ»Ρ‚Ρ€ΠΈΡ€Π°Ρ‚Π΅, ΠΏΠΎΠ΄Ρ€Π΅Π΄ΡƒΠ²Π°Ρ‚Π΅ ΠΈ ΠΏΡ€Π΅Π±Π°Ρ€ΡƒΠ²Π°Ρ‚Π΅ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈ.

Π—Π° Π΄Π° Π½Π΅ зависам ΠΎΠ΄ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΈΠΎΡ‚ систСм, ќС Π³ΠΈ поднСсам ситС Π±Π°Ρ€Π°ΡšΠ° Π΄ΠΎ ES ΠΊΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ CURL. Има ΠΈ Π΄ΠΎΠ΄Π°Ρ‚ΠΎΠΊ Π·Π° google chrome Π½Π°Ρ€Π΅Ρ‡Π΅Π½ смисла.

Низ тСкстот ΠΈΠΌΠ° Π»ΠΈΠ½ΠΊΠΎΠ²ΠΈ Π΄ΠΎ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π° ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ ΠΈΠ·Π²ΠΎΡ€ΠΈ. На ΠΊΡ€Π°Ρ˜ΠΎΡ‚ ΠΈΠΌΠ° Π»ΠΈΠ½ΠΊΠΎΠ²ΠΈ Π·Π° Π±Ρ€Π· пристап Π΄ΠΎ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π°Ρ‚Π°. Π”Π΅Ρ„ΠΈΠ½ΠΈΡ†ΠΈΠΈ Π·Π° Π½Π΅ΠΏΠΎΠ·Π½Π°Ρ‚ΠΈ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° сС Π½Π°Ρ˜Π΄Π°Ρ‚ Π²ΠΎ Ρ€Π΅Ρ‡Π½ΠΈΡ†ΠΈ.

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

Π—Π° Π΄Π° Π³ΠΎ Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ ΠΎΠ²Π°, ΠΏΡ€Π²ΠΎ Π½ΠΈ Ρ‚Ρ€Π΅Π±Π° Java. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠ΅Ρ€ΠΈ ΠΏΡ€Π΅ΠΏΠΎΡ€Π°Ρ‡Π° ΠΈΠ½ΡΡ‚Π°Π»ΠΈΡ€Π°Ρ˜Ρ‚Π΅ Π²Π΅Ρ€Π·ΠΈΠΈ Π½Π° Java ΠΏΠΎΠ½ΠΎΠ²ΠΈ ΠΎΠ΄ Java 8 Π°ΠΆΡƒΡ€ΠΈΡ€Π°ΡšΠ΅ 20 ΠΈΠ»ΠΈ Java 7 Π°ΠΆΡƒΡ€ΠΈΡ€Π°ΡšΠ΅ 55.

Π”ΠΈΡΡ‚Ρ€ΠΈΠ±ΡƒΡ†ΠΈΡ˜Π°Ρ‚Π° ES Π΅ достапна Π½Π° Π²Π΅Π±-страница Π·Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ΅Ρ€ΠΈ. ΠžΡ‚ΠΊΠ°ΠΊΠΎ ќС ја ΠΎΡ‚ΠΏΠ°ΠΊΡƒΠ²Π°Ρ‚Π΅ Π°Ρ€Ρ…ΠΈΠ²Π°Ρ‚Π°, Ρ‚Ρ€Π΅Π±Π° Π΄Π° ја ΠΈΠ·Π²Ρ€ΡˆΠΈΡ‚Π΅ bin/elasticsearch. Π˜ΡΡ‚ΠΎ Ρ‚Π°ΠΊΠ° достапни ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ Π·Π° стан ΠΈ yum. Има ΠΎΡ„ΠΈΡ†ΠΈΡ˜Π°Π»Π½Π° слика Π·Π° Π΄ΠΎΠΊΠ΅Ρ€. ПовСќС Π·Π° ΠΈΠ½ΡΡ‚Π°Π»Π°Ρ†ΠΈΡ˜Π°Ρ‚Π°.

По ΠΈΠ½ΡΡ‚Π°Π»Π°Ρ†ΠΈΡ˜Π°Ρ‚Π° ΠΈ ΡΡ‚Π°Ρ€Ρ‚ΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ, ајдС Π΄Π° ја ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌΠ΅ функционалноста:

# для удобства Π·Π°ΠΏΠΎΠΌΠ½ΠΈΠΌ адрСс Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ
#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"
}

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

АјдС да додадСмС објава во 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"
}'

ΠΎΠ΄Π³ΠΎΠ²ΠΎΡ€ Π½Π° сСрвСрот:

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

ES Π΅ создадСн автоматски индСкс Π±Π»ΠΎΠ³ ΠΈ Π’ΠΈΠΏ пост. МоТСмС Π΄Π° Π½Π°Ρ†Ρ€Ρ‚Π°ΠΌΠ΅ условна аналогија: индСксот Π΅ Π±Π°Π·Π° Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ, Π° Ρ‚ΠΈΠΏΠΎΡ‚ Π΅ Ρ‚Π°Π±Π΅Π»Π° Π²ΠΎ ΠΎΠ²Π°Π° Π±Π°Π·Π° Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ. БСкој Ρ‚ΠΈΠΏ ΠΈΠΌΠ° своја шСма βˆ’ ΠΌΠ°ΠΏΠΈΡ€Π°ΡšΠ΅, исто ΠΊΠ°ΠΊΠΎ Ρ€Π΅Π»Π°Ρ†ΠΈΠΎΠ½Π° Ρ‚Π°Π±Π΅Π»Π°. ΠœΠ°ΠΏΠΈΡ€Π°ΡšΠ΅Ρ‚ΠΎ сС Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π° автоматски ΠΊΠΎΠ³Π° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΡ‚ Π΅ индСксиран:

# ΠŸΠΎΠ»ΡƒΡ‡ΠΈΠΌ 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"
          }
        }
      }
    }
  }
}

Π’Ρ€Π΅Π΄ΠΈ Π΄Π° сС Π½Π°ΠΏΠΎΠΌΠ΅Π½Π΅ Π΄Π΅ΠΊΠ° ES Π½Π΅ ΠΏΡ€Π°Π²ΠΈ Ρ€Π°Π·Π»ΠΈΠΊΠ° ΠΏΠΎΠΌΠ΅Ρ“Ρƒ Π΅Π΄Π½Π° врСдност ΠΈ Π½ΠΈΠ·Π° врСдности. На ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠΎΠ»Π΅Ρ‚ΠΎ Π·Π° наслов Сдноставно содрТи наслов, Π° ΠΏΠΎΠ»Π΅Ρ‚ΠΎ ΠΎΠ·Π½Π°ΠΊΠΈ содрТи Π½ΠΈΠ·Π° Π½ΠΈΠ·ΠΈ, ΠΈΠ°ΠΊΠΎ Ρ‚ΠΈΠ΅ сС прСтставСни Π½Π° ист Π½Π°Ρ‡ΠΈΠ½ ΠΏΡ€ΠΈ ΠΌΠ°ΠΏΠΈΡ€Π°ΡšΠ΅Ρ‚ΠΎ.
ΠŸΠΎΠ΄ΠΎΡ†Π½Π° ќС Π·Π±ΠΎΡ€ΡƒΠ²Π°ΠΌΠ΅ повСќС Π·Π° ΠΌΠ°ΠΏΠΈΡ€Π°ΡšΠ΅.

Π‘Π°Ρ€Π°ΡšΠ°

Π’Ρ€Π°ΡœΠ°ΡšΠ΅ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ спорСд Π½Π΅Π³ΠΎΠ²ΠΈΠΎΡ‚ ΠΈΠ΄:

# ΠΈΠ·Π²Π»Π΅Ρ‡Π΅ΠΌ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ с 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 Π³ΠΎ содрТи Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΡ‚ ΡˆΡ‚ΠΎ Π³ΠΎ индСксиравмС. ES Π½Π΅ ја користи ΠΎΠ²Π°Π° врСдност Π·Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π·Π° ΠΏΡ€Π΅Π±Π°Ρ€ΡƒΠ²Π°ΡšΠ΅ Π·Π°Ρ‚ΠΎΠ° ΡˆΡ‚ΠΎ Π˜Π½Π΄Π΅ΠΊΡΠΈΡ‚Π΅ сС користат Π·Π° ΠΏΡ€Π΅Π±Π°Ρ€ΡƒΠ²Π°ΡšΠ΅. Π—Π° Π΄Π° Π·Π°ΡˆΡ‚Π΅Π΄ΠΈ простор, ES складира ΠΊΠΎΠΌΠΏΡ€ΠΈΠΌΠΈΡ€Π°Π½ ΠΈΠ·Π²ΠΎΡ€Π΅Π½ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚. Ако Π½ΠΈ Ρ‚Ρ€Π΅Π±Π° само ID, Π° Π½Π΅ Ρ†Π΅Π»ΠΈΠΎΡ‚ ΠΈΠ·Π²ΠΎΡ€Π΅Π½ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚, Ρ‚ΠΎΠ³Π°Ρˆ ΠΌΠΎΠΆΠ΅ΠΌΠ΅ Π΄Π° Π³ΠΎ ΠΎΠ½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠΈΠΌΠ΅ ΡΠΊΠ»Π°Π΄ΠΈΡ€Π°ΡšΠ΅Ρ‚ΠΎ Π½Π° ΠΈΠ·Π²ΠΎΡ€ΠΎΡ‚.

Π”ΠΎΠΊΠΎΠ»ΠΊΡƒ Π½Π΅ Π½ΠΈ Ρ‚Ρ€Π΅Π±Π°Π°Ρ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΈ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, ΠΌΠΎΠΆΠ΅ΠΌΠ΅ Π΄Π° ја Π΄ΠΎΠ±ΠΈΠ΅ΠΌΠ΅ само содрТината Π½Π° _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 Π²ΠΎ ΠΈΠ·Π»Π΅Π·ΠΎΡ‚ содрТи Π½ΠΈΠ·Π° ΠΎΠ΄ Ρ†Π΅Π»ΠΈ Π±Ρ€ΠΎΠ΅Π²ΠΈ со ΠΊΠΎΠΈ сС Π²Ρ€ΡˆΠΈ ΡΠΎΡ€Ρ‚ΠΈΡ€Π°ΡšΠ΅. ОниС. Π΄Π°Ρ‚ΡƒΠΌΠΎΡ‚ бСшС ΠΏΡ€Π΅Ρ‚Π²ΠΎΡ€Π΅Π½ Π²ΠΎ Ρ†Π΅Π» Π±Ρ€ΠΎΡ˜. ПовСќС ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π·Π° ΡΠΎΡ€Ρ‚ΠΈΡ€Π°ΡšΠ΅Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π½Π°Ρ˜Π΄Π΅Ρ‚Π΅ Π²ΠΎ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π°.

Π€ΠΈΠ»Ρ‚Ρ€ΠΈ ΠΈ ΠΏΡ€Π°ΡˆΠ°ΡšΠ°

ES бидСјќи Π²Π΅Ρ€Π·ΠΈΡ˜Π°Ρ‚Π° 2 Π½Π΅ ΠΏΡ€Π°Π²ΠΈ Ρ€Π°Π·Π»ΠΈΠΊΠ° ΠΏΠΎΠΌΠ΅Ρ“Ρƒ Ρ„ΠΈΠ»Ρ‚Ρ€ΠΈ ΠΈ ΠΏΡ€Π°ΡˆΠ°ΡšΠ°, намСсто Ρ‚ΠΎΠ° сС Π²ΠΎΠ²Π΅Π΄ΡƒΠ²Π° ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ‚ΠΎΡ‚ Π½Π° контСксти.
ΠšΠΎΠ½Ρ‚Π΅ΠΊΡΡ‚ΠΎΡ‚ Π½Π° Π±Π°Ρ€Π°ΡšΠ΅Ρ‚ΠΎ сС Ρ€Π°Π·Π»ΠΈΠΊΡƒΠ²Π° ΠΎΠ΄ контСкстот Π½Π° Ρ„ΠΈΠ»Ρ‚Π΅Ρ€ΠΎΡ‚ ΠΏΠΎ Ρ‚ΠΎΠ° ΡˆΡ‚ΠΎ Π±Π°Ρ€Π°ΡšΠ΅Ρ‚ΠΎ Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π° _score ΠΈ Π½Π΅ Π΅ ΠΊΠ΅ΡˆΠΈΡ€Π°Π½ΠΎ. Π¨Ρ‚ΠΎ Π΅ _score ќС Π²ΠΈ ΠΏΠΎΠΊΠ°ΠΆΠ°ΠΌ ΠΏΠΎΠ΄ΠΎΡ†Π½Π°.

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

НиС Π³ΠΎ користимС Π±Π°Ρ€Π°ΡšΠ΅Ρ‚ΠΎ опсСг Π²ΠΎ контСкст Π½Π° Ρ„ΠΈΠ»Ρ‚Π΅Ρ€ΠΎΡ‚:

# ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ посты, ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½Π½Ρ‹Π΅ 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 Смисии РСлСвантност. Ако Π±Π°Ρ€Π°ΡšΠ΅Ρ‚ΠΎ сС ΠΈΠ·Π²Ρ€ΡˆΠΈ Π²ΠΎ контСкст Π½Π° Ρ„ΠΈΠ»Ρ‚Π΅Ρ€, Ρ‚ΠΎΠ³Π°Ρˆ врСдноста _score сСкогаш ќС Π±ΠΈΠ΄Π΅ Π΅Π΄Π½Π°ΠΊΠ²Π° Π½Π° 1, ΡˆΡ‚ΠΎ Π·Π½Π°Ρ‡ΠΈ цСлосно ΡΠΎΠ²ΠΏΠ°Ρ“Π°ΡšΠ΅ со Ρ„ΠΈΠ»Ρ‚Π΅Ρ€ΠΎΡ‚.

Анализатори

Анализатори сС ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΈ Π·Π° ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€Π°ΡšΠ΅ Π½Π° ΠΈΠ·Π²ΠΎΡ€Π½ΠΈΠΎΡ‚ тСкст Π²ΠΎ Π·Π±ΠΈΡ€ Π½Π° Ρ‚ΠΎΠΊΠ΅Π½ΠΈ.
АнализаторитС сС ΡΠΎΡΡ‚ΠΎΡ˜Π°Ρ‚ ΠΎΠ΄ Π΅Π΄Π΅Π½ Π’ΠΎΠΊΠ΅Π½ΠΈΠ·Π°Ρ‚ΠΎΡ€ ΠΈ Π½Π΅ΠΊΠΎΠ»ΠΊΡƒ ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»Π½ΠΈ TokenFilters. На Ρ‚ΠΎΠΊΠ΅Π½ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΡ‚ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΌΡƒ ΠΏΡ€Π΅Ρ‚Ρ…ΠΎΠ΄Π°Ρ‚ Π½Π΅ΠΊΠΎΠ»ΠΊΡƒ CharFilters. Π’ΠΎΠΊΠ΅Π½ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΈΡ‚Π΅ ја раскинуваат ΠΈΠ·Π²ΠΎΡ€Π½Π°Ρ‚Π° Π½ΠΈΠ·Π° Π²ΠΎ Ρ‚ΠΎΠΊΠ΅Π½ΠΈ, ΠΊΠ°ΠΊΠΎ ΡˆΡ‚ΠΎ сС ΠΏΡ€Π°Π·Π½ΠΈ мСста ΠΈ интСрпункциски Π·Π½Π°Ρ†ΠΈ. TokenFilter ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΌΠ΅Π½ΡƒΠ²Π° Ρ‚ΠΎΠΊΠ΅Π½ΠΈ, Π΄Π° Π±Ρ€ΠΈΡˆΠ΅ ΠΈΠ»ΠΈ Π΄Π° Π΄ΠΎΠ΄Π°Π²Π° Π½ΠΎΠ²ΠΈ, Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π΄Π° Π³ΠΎ остави само стСблото Π½Π° Π·Π±ΠΎΡ€ΠΎΡ‚, Π΄Π° отстранува ΠΏΡ€Π΅Π΄Π»ΠΎΠ·ΠΈ, Π΄Π° Π΄ΠΎΠ΄Π°Π²Π° синоними. CharFilter - ја ΠΌΠ΅Π½ΡƒΠ²Π° Ρ†Π΅Π»Π°Ρ‚Π° ΠΈΠ·Π²ΠΎΡ€Π½Π° Π½ΠΈΠ·Π°, Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π³ΠΈ отсСкува HTML Ρ‚Π°Π³ΠΎΠ²ΠΈΡ‚Π΅.

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

АјдС Π΄Π° Π³ΠΈ искористимС API ΠΈ Π΄Π° Π²ΠΈΠ΄ΠΈΠΌΠ΅ ΠΊΠ°ΠΊΠΎ стандарднитС ΠΈ рускитС Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΈ ја трансформираат Π½ΠΈΠ·Π°Ρ‚Π° β€žΠ‘ΠΌΠ΅ΡˆΠ½ΠΈ ΠΏΡ€ΠΈΠΊΠ°Π·Π½ΠΈ Π·Π° ΠΌΠ°Ρ‡ΠΈΡšΠ°β€œ:

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

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

АјдС Π΄Π° Π²ΠΈΠ΄ΠΈΠΌΠ΅ ΠΊΠΎΠΈ Tokenizer, TokenFilters, CharFilters Π³ΠΈ користи рускиот Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€:

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

АјдС Π΄Π° Π³ΠΎ опишСмС Π½Π°ΡˆΠΈΠΎΡ‚ Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ заснован Π½Π° руски, кој ќС Π³ΠΈ отсСчС HTML ΠΎΠ·Π½Π°ΠΊΠΈΡ‚Π΅. Π”Π° Π³ΠΎ Π½Π°Ρ€Π΅Ρ‡Π΅ΠΌΠ΅ стандардно, бидСјќи стандардно ќС сС користи Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ со ΠΎΠ²Π° ΠΈΠΌΠ΅.

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

ΠŸΡ€Π²ΠΎ, ситС HTML ΠΎΠ·Π½Π°ΠΊΠΈ ќС сС отстранат ΠΎΠ΄ ΠΈΠ·Π²ΠΎΡ€Π½Π°Ρ‚Π° Π½ΠΈΠ·Π°, ΠΏΠΎΡ‚ΠΎΠ° стандардот Π·Π° Ρ‚ΠΎΠΊΠ΅Π½ΠΈΠ·Π°Ρ‚ΠΎΡ€ ќС Π³ΠΎ ΠΏΠΎΠ΄Π΅Π»ΠΈ Π½Π° Ρ‚ΠΎΠΊΠ΅Π½ΠΈ, Π΄ΠΎΠ±ΠΈΠ΅Π½ΠΈΡ‚Π΅ Ρ‚ΠΎΠΊΠ΅Π½ΠΈ ќС сС ΠΏΡ€Π΅Ρ„Ρ€Π»Π°Ρ‚ Π½Π° ΠΌΠ°Π»ΠΈ Π±ΡƒΠΊΠ²ΠΈ, Π½Π΅Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΈ Π·Π±ΠΎΡ€ΠΎΠ²ΠΈ ќС сС отстранат, Π° останатитС Ρ‚ΠΎΠΊΠ΅Π½ΠΈ ќС останат стСбло Π½Π° Π·Π±ΠΎΡ€ΠΎΡ‚.

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

ΠŸΠΎΠ³ΠΎΡ€Π΅ Π³ΠΎ опишавмС стандардниот Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€. ЌС сС ΠΏΡ€ΠΈΠΌΠ΅Π½ΡƒΠ²Π° Π½Π° ситС полиња со Π½ΠΈΠ·Π°. ΠΠ°ΡˆΠΈΠΎΡ‚ пост содрТи Π½ΠΈΠ·Π° ΠΎΠ·Π½Π°ΠΊΠΈ, Ρ‚Π°ΠΊΠ° ΡˆΡ‚ΠΎ ΠΎΠ·Π½Π°ΠΊΠΈΡ‚Π΅ исто Ρ‚Π°ΠΊΠ° ќС Π±ΠΈΠ΄Π°Ρ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π΅Π½ΠΈ ΠΎΠ΄ Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΡ‚. Π‘ΠΈΠ΄Π΅Ρ˜ΡœΠΈ Π‘Π°Ρ€Π°ΠΌΠ΅ објави ΠΏΠΎ Ρ‚ΠΎΡ‡Π½ΠΎ ΡΠΎΠ²ΠΏΠ°Ρ“Π°ΡšΠ΅ со ΠΎΠ·Π½Π°ΠΊΠ°, Ρ‚ΠΎΠ³Π°Ρˆ Ρ‚Ρ€Π΅Π±Π° Π΄Π° ја ΠΎΠ½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠΈΠΌΠ΅ Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚Π° Π·Π° ΠΏΠΎΠ»Π΅Ρ‚ΠΎ ΠΎΠ·Π½Π°ΠΊΠΈ.

АјдС Π΄Π° создадСмС индСксСн Π±Π»ΠΎΠ³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

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

Π˜Π·Π²ΠΎΡ€: www.habr.com