Основи на Elasticsearch

Elasticsearch β€” Ρ‚ΡŠΡ€ΡΠ°Ρ‡Π½Π° систСма с json rest api, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‰Π° Lucene ΠΈ написана Π½Π° Java. ОписаниС Π½Π° всички прСдимства Π½Π° Ρ‚Π°Π·ΠΈ систСма Π΅ Π½Π°Π»ΠΈΡ‡Π½ΠΎ Π½Π° официалния сайт. Π’ тСкста Π½Π°Ρ‚Π°Ρ‚ΡŠΠΊ Ρ‰Π΅ Π½Π°Ρ€ΠΈΡ‡Π°ΠΌΠ΅ Elasticsearch ES.

Подобни систСми сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ ΠΏΡ€ΠΈ слоТСн Ρ‚ΡŠΡ€ΡΠ΅Π½Π΅ Π² Π±Π°Π·ΠΈ ΠΎΡ‚ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈ. НапримСр, Ρ‚ΡŠΡ€ΡΠ΅Π½Π΅ с ΠΎΠ³Π»Π΅Π΄ Π½Π° морфологията Π½Π° Π΅Π·ΠΈΠΊΠ° ΠΈΠ»ΠΈ Ρ‚ΡŠΡ€ΡΠ΅Π½Π΅ ΠΏΠΎ Π³Π΅ΠΎ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ΠΈ.

Π’ Ρ‚Π°Π·ΠΈ статия Ρ‰Π΅ Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌ основитС Π½Π° ES Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Π½Π° индСксиранСто Π½Π° ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π² Π±Π»ΠΎΠ³. Π©Π΅ Π²ΠΈ ΠΏΠΎΠΊΠ°ΠΆΠ° ΠΊΠ°ΠΊ Π΄Π° Ρ„ΠΈΠ»Ρ‚Ρ€ΠΈΡ€Π°Ρ‚Π΅, сортиратС ΠΈ Ρ‚ΡŠΡ€ΡΠΈΡ‚Π΅ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈ.

Π—Π° Π΄Π° Π½Π΅ завися ΠΎΡ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Π°Ρ‚Π° систСма, всички заявки към ES Ρ‰Π΅ правя с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° CURL. Има ΠΈ плъгин Π·Π° Google Chrome, Π½Π°Ρ€Π΅Ρ‡Π΅Π½ sense.

Π’ тСкста са поставСни Π²Ρ€ΡŠΠ·ΠΊΠΈ към докумСнтацията ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΡ†ΠΈ. Π’ края са Ρ€Π°Π·ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈ Π²Ρ€ΡŠΠ·ΠΊΠΈ Π·Π° Π±ΡŠΡ€Π· Π΄ΠΎΡΡ‚ΡŠΠΏ Π΄ΠΎ докумСнтацията. ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡ Π½Π° Π½Π΅ΠΏΠΎΠ·Π½Π°Ρ‚ΠΈ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΏΡ€ΠΎΡ‡Π΅Ρ‚Π΅Ρ‚Π΅ Π² глосария.

Π˜Π½ΡΡ‚Π°Π»Π°Ρ†ΠΈΡ Π½Π° ES

Π—Π° Ρ‚ΠΎΠ²Π° ΠΏΡŠΡ€Π²ΠΎ Ρ‰Π΅ Π½ΠΈ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ Java. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅ ΠΏΡ€Π΅ΠΏΠΎΡ€ΡŠΡ‡Π²Π°Ρ‚ трябва Π΄Π° инсталиратС вСрсии Π½Π° Java ΠΏΠΎ-Π½ΠΎΠ²ΠΈ ΠΎΡ‚ Java 8 update 20 ΠΈΠ»ΠΈ Java 7 update 55.

Дистрибуцията Π½Π° ES Π΅ Π½Π°Π»ΠΈΡ‡Π½Π° Π½Π° сайта Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°. Π‘Π»Π΅Π΄ Ρ€Π°Π·Π°Ρ€Ρ…ΠΈΠ²ΠΈΡ€Π°Π½Π΅ Π½Π° Π°Ρ€Ρ…ΠΈΠ²Π°, трябва Π΄Π° стартиратС bin/elasticsearch. Π‘ΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° са Π½Π°Π»ΠΈΡ‡Π½ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ Π·Π° apt ΠΈ yum. Има ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»Π΅Π½ ΠΈΠΌΠΈΠ΄ΠΆ Π·Π° docker. ΠŸΠΎΠ²Π΅Ρ‡Π΅ Π·Π° инсталацията.

Π‘Π»Π΅Π΄ инсталацията ΠΈ стартиранСто, провСрявамС работоспособността:

# для удобства Π·Π°ΠΏΠΎΠΌΠ½ΠΈΠΌ адрСс Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ
#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 Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ Π΅ създал индСкс blog ΠΈ Ρ‚ΠΈΠΏ post. МоТСм Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ условна аналогия: ΠΈΠ½Π΄Π΅ΠΊΡΡŠΡ‚ Π΅ Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ, Π° Ρ‚ΠΈΠΏΡŠΡ‚ Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Π° Π² Ρ‚Π°Π·ΠΈ Π±Π°Π·Π°. ВсСки Ρ‚ΠΈΠΏ ΠΈΠΌΠ° своя схСма β€” ΡΡŠΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΈΠ΅, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΈ Ρ€Π΅Π»Π°Ρ†ΠΈΠΎΠ½Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†Π°. Mapping сС Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π° Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ ΠΏΡ€ΠΈ индСксиранСто Π½Π° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°:

# ΠŸΠΎΠ»ΡƒΡ‡ΠΈΠΌ 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 Π½Π΅ ΠΏΡ€Π°Π²ΠΈ Ρ€Π°Π·Π»ΠΈΠΊΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ Π΅Π΄ΠΈΠ½ΠΈΡ‡Π½Π° стойност ΠΈ масив ΠΎΡ‚ стойности. НапримСр, ΠΏΠΎΠ»Π΅Ρ‚ΠΎ title ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° само Π·Π°Π³Π»Π°Π²ΠΈΠ΅, Π° ΠΏΠΎΠ»Π΅Ρ‚ΠΎ tags β€” масив ΠΎΡ‚ Π½ΠΈΠ·ΠΎΠ²Π΅, Π²ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‡Π΅ Ρ‚Π΅ са прСдставСни Π² ΠΌΠ°ΠΏΠΈΠ½Π³Π° ΠΏΠΎ Π΅Π΄ΠΈΠ½ ΠΈ ΡΡŠΡ‰ΠΈ Π½Π°Ρ‡ΠΈΠ½.
По-късно Ρ‰Π΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ Π·Π° ΠΌΠ°ΠΏΠΈΠ½Π³Π° ΠΏΠΎ-ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ.

Заявки

Π˜Π·Π²Π»ΠΈΡ‡Π°Π½Π΅ Π½Π° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° ΠΏΠΎ нСговия 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": "\u0412\u0435\u0441\u0435\u043b\u044b\u0435 \u043a\u043e\u0442\u044f\u0442\u0430",
        "content": "<p>\u0421\u043c\u0435\u0448\u043d\u0430 \u0438\u0441\u0442\u043e\u0440\u0438\u044f \u0437\u0430 \u043a\u043e\u0442\u0435\u043d\u0446\u0430<p>",
        "tags": [
            "\u043a\u043e\u0442\u044f\u0442\u0430",
            "\u0441\u043c\u0435\u0448\u043d\u0430\u044f \u0438\u0441\u0442\u043e\u0440\u0438\u044f"
        ],
        "published_at": "2014-09-12T20:44:42+00:00"
    }
}

Π’ ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€Π° сС появиха Π½ΠΎΠ²ΠΈ ΠΊΠ»ΡŽΡ‡ΠΎΠ²Π΅: _version ΠΈ _source. Π’ΡΡŠΡ‰Π½ΠΎΡΡ‚, всички ΠΊΠ»ΡŽΡ‡ΠΎΠ²Π΅, Π·Π°ΠΏΠΎΡ‡Π²Π°Ρ‰ΠΈ с _ сС отнасят Π΄ΠΎ слуТСбни.

ΠšΠ»ΡŽΡ‡ _version ΠΏΠΎΠΊΠ°Π·Π²Π° вСрсията Π½Π° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°. Вя Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠ° Π·Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° Π·Π° оптимистични Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ. НапримСр, искамС Π΄Π° ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΠΌ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ с вСрсия 1. Π˜Π·ΠΏΡ€Π°Ρ‰Π°ΠΌΠ΅ промСнСния Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ ΠΈ посочвамС, Ρ‡Π΅ Ρ‚ΠΎΠ²Π° Π΅ корСкция Π½Π° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° с вСрсия 1. Ако някой Π΄Ρ€ΡƒΠ³ ΡΡŠΡ‰ΠΎ Π΅ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€Π°Π» Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° с вСрсия 1 ΠΈ Π΅ ΠΈΠ·ΠΏΡ€Π°Ρ‚ΠΈΠ» ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅ ΠΏΡ€Π΅Π΄ΠΈ нас, ES няма Π΄Π° ΠΏΡ€ΠΈΠ΅ΠΌΠ΅ Π½Π°ΡˆΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Ρ‚ΠΎΠΉ ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° с вСрсия 2.

ΠšΠ»ΡŽΡ‡ _source ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°, ΠΊΠΎΠΉΡ‚ΠΎ смС индСксирали. ES Π½Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Ρ‚Π°Π·ΠΈ стойност Π·Π° Ρ‚ΡŠΡ€ΡΠ΅Π½Π΅, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Π·Π° Ρ‚ΡŠΡ€ΡΠ΅Π½Π΅ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ индСкситС. Π‘ Ρ†Π΅Π» спСстяванС Π½Π° място, ES ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π° компрСсирания ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»Π΅Π½ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚. Ако Π½ΠΈ Π΅ Π½ΡƒΠΆΠ΅Π½ само id, Π° Π½Π΅ цСлия ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»Π΅Π½ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π΄Π΅Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°ΠΌΠ΅ ΡΡŠΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»Π°.

Ако Π½Π΅ Π½ΠΈ Π΅ Π½ΡƒΠΆΠ½Π° Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½Π° информация, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ само ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Π½ΠΈΠ΅Ρ‚ΠΎ _source:

curl -XGET "$ES_URL/blog/post/1/_source?pretty"
{
    "title": "\u0412\u0435\u0441\u0435\u043b\u044b\u0435 \u043a\u043e\u0442\u044f\u0442\u0430",
    "content": "<p>\u0421\u043c\u0435\u0448\u043d\u0430 \u0438\u0441\u0442\u043e\u0440\u0438\u044f \u0437\u0430 \u043a\u043e\u0442\u0435\u043d\u0446\u0430<p>",
    "tags": [
        "\u043a\u043e\u0442\u044f\u0442\u0430",
        "\u0441\u043c\u0435\u0448\u043d\u0430\u044f \u0438\u0441\u0442\u043e\u0440\u0438\u044f"
    ],
    "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 ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π°Π²Π° броя Π½Π° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ‚Π΅ Π² Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈΡ‚Π΅. ΠΎΠ±Ρ‰ΠΎ ΠΏΠΎΠΊΠ°Π·Π²Π° общия Π±Ρ€ΠΎΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈ, отговарящи Π½Π° заявката. sort Π² Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈΡ‚Π΅ ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° масив ΠΎΡ‚ Ρ†Π΅Π»ΠΈ числа, ΠΏΠΎ ΠΊΠΎΠΈΡ‚ΠΎ сС ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π° сортиранСто. Π’.Π΅. Π΄Π°Ρ‚Π°Ρ‚Π° Π΅ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ²Π°Π½Π° Π² цяло число. ΠŸΠΎΠ²Π΅Ρ‡Π΅ Π·Π° сортиранСто ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΏΡ€ΠΎΡ‡Π΅Ρ‚Π΅Ρ‚Π΅ Π² докумСнтацията.

Π€ΠΈΠ»Ρ‚Ρ€ΠΈ ΠΈ заявки

ES ΠΎΡ‚ вСрсия 2 Π½Π΅ Ρ€Π°Π·Π»ΠΈΡ‡Π°Π²Π° Ρ„ΠΈΠ»Ρ‚Ρ€ΠΈ ΠΈ заявки, вмСсто Ρ‚ΠΎΠ²Π° въвСдСно Π΅ понятиСто контСксти.
ΠšΠΎΠ½Ρ‚Π΅ΠΊΡΡ‚ΡŠΡ‚ Π½Π° заявката сС Ρ€Π°Π·Π»ΠΈΡ‡Π°Π²Π° ΠΎΡ‚ контСкста Π½Π° Ρ„ΠΈΠ»Ρ‚ΡŠΡ€Π° с Ρ‚ΠΎΠ²Π°, Ρ‡Π΅ заявката Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π° _score ΠΈ Π½Π΅ сС ΠΊΠ΅ΡˆΠΈΡ€Π°. Какво Π΅ _score Ρ‰Π΅ ΠΏΠΎΠΊΠ°ΠΆΠ° ΠΏΠΎ-късно.

Π€ΠΈΠ»Ρ‚Ρ€ΠΈΡ€Π°Π½Π΅ ΠΏΠΎ Π΄Π°Ρ‚Π°

ИзползвамС заявка range Π² контСкста Π½Π° filter:

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

Π€ΠΈΠ»Ρ‚Ρ€ΠΈΡ€Π°Π½Π΅ ΠΏΠΎ Ρ‚Π°Π³ΠΎΠ²Π΅

ИзползвамС terΠΌΠΎΠ²ΠΎ Π·Π°ΠΏΠΈΡ‚Π²Π°Π½Π΅ Π·Π° Ρ‚ΡŠΡ€ΡΠ΅Π½Π΅ Π½Π° id Π½Π° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈ, ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Ρ‰ΠΈ Π·Π°Π΄Π°Π΄Π΅Π½Π°Ρ‚Π° Π΄ΡƒΠΌΠ°:

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

ΠŸΡŠΠ»Π½ΠΎΡ‚Π΅ΠΊΡΡ‚ΠΎΠ²ΠΎ Ρ‚ΡŠΡ€ΡΠ΅Π½Π΅

Π’Ρ€ΠΈΡ‚Π΅ Π½ΠΈ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Ρ‚ слСдното Π² ΠΏΠΎΠ»Π΅Ρ‚ΠΎ content:

  • <p>БмСшна история Π·Π° ΠΊΠΎΡ‚Π΅Π½Ρ†Π°<p>
  • <p>БмСшна история Π·Π° ΠΊΡƒΡ‡Π΅Π½Ρ†Π°Ρ‚Π°<p>
  • <p>ВъТна история Π·Π° Π±Π΅Π΄Π½ΠΎΡ‚ΠΎ ΠΊΠΎΡ‚Π΅Π½Ρ†Π΅ ΠΎΡ‚ ΡƒΠ»ΠΈΡ†Π°Ρ‚Π°<p>

ИзползвамС match query Π·Π° Ρ‚ΡŠΡ€ΡΠ΅Π½Π΅ Π½Π° id Π½Π° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈ, ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Ρ‰ΠΈ Π·Π°Π΄Π°Π΄Π΅Π½Π°Ρ‚Π° Π΄ΡƒΠΌΠ°:

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

Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‚ΠΎΠ²Π°, Π°ΠΊΠΎ Ρ‚ΡŠΡ€ΡΠΈΠΌ "истории" Π² ΠΏΠΎΠ»Π΅Ρ‚ΠΎ content, няма Π΄Π° Π½Π°ΠΌΠ΅Ρ€ΠΈΠΌ Π½ΠΈΡ‰ΠΎ, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Π² индСкса са записани само ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»Π½ΠΈΡ‚Π΅ Π΄ΡƒΠΌΠΈ, Π° Π½Π΅ Ρ‚Π΅Ρ…Π½ΠΈΡ‚Π΅ основи. Π—Π° Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ качСствСно Ρ‚ΡŠΡ€ΡΠ΅Π½Π΅, трябва Π΄Π° настроим Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π°.

ПолС _score ΠΏΠΎΠΊΠ°Π·Π²Π° рСлСвантност. Ако заявката сС изпълнява Π² контСкста Π½Π° filter, стойността Π½Π° _score Π²ΠΈΠ½Π°Π³ΠΈ Ρ‰Π΅ бъдС Ρ€Π°Π²Π½Π° Π½Π° 1, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π²Π° пълно ΡΡŠΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΈΠ΅ с Ρ„ΠΈΠ»Ρ‚ΡŠΡ€Π°.

Анализатори

Анализатори са Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈ Π·Π° ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ²Π°Π½Π΅ Π½Π° изходния тСкст Π² Π½Π°Π±ΠΎΡ€ ΠΎΡ‚ Ρ‚ΠΎΠΊΠ΅Π½ΠΈ.
АнализаторитС сС ΡΡŠΡΡ‚ΠΎΡΡ‚ ΠΎΡ‚ Π΅Π΄ΠΈΠ½ Tokenizer ΠΈ няколко Π½Π΅Π·Π°Π΄ΡŠΠ»ΠΆΠΈΡ‚Π΅Π»Π½ΠΈ TokenFilters. Tokenizer ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΡ€Π΅Π΄ΡˆΠ΅ΡΡ‚Π²Π° няколко CharFilters. Tokenizer раздСля изходния Π½ΠΈΠ· Π½Π° Ρ‚ΠΎΠΊΠ΅Π½ΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠΎ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»ΠΈ ΠΈ ΠΏΡƒΠ½ΠΊΡ‚ΡƒΠ°Ρ†ΠΈΠΎΠ½Π½ΠΈ Π·Π½Π°Ρ†ΠΈ. TokenFilter ΠΌΠΎΠΆΠ΅ Π΄Π° промСня Ρ‚ΠΎΠΊΠ΅Π½ΠΈ, Π΄Π° ΠΈΠ·Ρ‚Ρ€ΠΈΠ²Π° ΠΈΠ»ΠΈ добавя Π½ΠΎΠ²ΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π΄Π° остави само основата Π½Π° Π΄ΡƒΠΌΠ°Ρ‚Π°, Π΄Π° ΠΏΡ€Π΅ΠΌΠ°Ρ…Π½Π΅ ΠΏΡ€Π΅Π΄Π»ΠΎΠ·ΠΈΡ‚Π΅, Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈ синоними. CharFilter промСня цСлия ΠΈΠ·Ρ…ΠΎΠ΄Π΅Π½ Π½ΠΈΠ·, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, изрязва html Ρ‚Π°Π³ΠΎΠ²Π΅.

Π’ ES ΠΈΠΌΠ° няколко стандартни Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΈ.НапримСр, Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΡŠΡ‚ russian.

НСка ΠΈΠ·ΠΏΡ€ΠΎΠ±Π²Π°ΠΌΠ΅ api ΠΈ Π΄Π° Π²ΠΈΠ΄ΠΈΠΌ ΠΊΠ°ΠΊ Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΈΡ‚Π΅ standard ΠΈ russian ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ²Π°Ρ‚ Π½ΠΈΠ·Π° "БмСшни истории Π·Π° ΠΊΠΎΡ‚Π΅Ρ‚Π°":

# ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ 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" : "",
    "position" : 0
  }, {
    "token" : "истории",
    "start_offset" : 8,
    "end_offset" : 15,
    "type" : "",
    "position" : 1
  }, {
    "token" : "Π·Π°",
    "start_offset" : 16,
    "end_offset" : 19,
    "type" : "",
    "position" : 2
  }, {
    "token" : "ΠΊΠΎΡ‚Π΅Ρ‚Π°",
    "start_offset" : 20,
    "end_offset" : 26,
    "type" : "",
    "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" : "",
    "position" : 0
  }, {
    "token" : "истор",
    "start_offset" : 8,
    "end_offset" : 15,
    "type" : "",
    "position" : 1
  }, {
    "token" : "ΠΊΠΎΡ‚",
    "start_offset" : 20,
    "end_offset" : 25,
    "type" : "",
    "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",
      
      "filter": [
        "lowercase",
        "russian_stop",
        "russian_keywords",
        "russian_stemmer"
      ]
      
    }
  }
}

ОпишСм своя Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ Π½Π° основата Π½Π° руския, ΠΊΠΎΠΉΡ‚ΠΎ Ρ‰Π΅ ΠΏΡ€Π΅ΠΌΠ°Ρ…Π½Π΅ HTML Ρ‚Π°Π³ΠΎΠ²Π΅Ρ‚Π΅. НСка Π³ΠΎ Π½Π°Ρ€Π΅Ρ‡Π΅ΠΌ default, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ с Ρ‚ΠΎΠ²Π° ΠΈΠΌΠ΅ Ρ‰Π΅ бъдС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅.

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

ΠŸΡŠΡ€Π²ΠΎ, ΠΎΡ‚ изходния Π½ΠΈΠ· Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ ΠΏΡ€Π΅ΠΌΠ°Ρ…Π½Π°Ρ‚ΠΈ всички HTML Ρ‚Π°Π³ΠΎΠ²Π΅, слСд Ρ‚ΠΎΠ²Π° Ρ‚ΠΎΠΉ Ρ‰Π΅ бъдС Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ Π½Π° Ρ‚ΠΎΠΊΠ΅Π½ΠΈ с tokenizer standard, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΡ‚Π΅ Ρ‚ΠΎΠΊΠ΅Π½ΠΈ Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ²Π°Π½ΠΈ Π² ΠΌΠ°Π»ΠΊΠΈ Π±ΡƒΠΊΠ²ΠΈ, Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ ΠΏΡ€Π΅ΠΌΠ°Ρ…Π½Π°Ρ‚ΠΈ Π½Π΅Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΈΡ‚Π΅ Π΄ΡƒΠΌΠΈ ΠΈ ΠΎΡ‚ оставащитС Ρ‚ΠΎΠΊΠ΅Π½ΠΈ Ρ‰Π΅ останС основата Π½Π° Π΄ΡƒΠΌΠ°Ρ‚Π°.

БъздаванС на индСкс

По-Π³ΠΎΡ€Π΅ описахмС default Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€. Π’ΠΎΠΉ Ρ‰Π΅ бъдС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ към всички тСкстови ΠΏΠΎΠ»Π΅Ρ‚Π°. ΠΠ°ΡˆΠΈΡΡ‚ пост ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° масив ΠΎΡ‚ Ρ‚Π°Π³ΠΎΠ²Π΅, ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΎ, Ρ‚Π°Π³ΠΎΠ²Π΅Ρ‚Π΅ ΡΡŠΡ‰ΠΎ Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π΅Π½ΠΈ ΠΎΡ‚ Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π°. Въй ΠΊΠ°Ρ‚ΠΎ Ρ‚ΡŠΡ€ΡΠΈΠΌ постовС ΠΏΠΎ Ρ‚ΠΎΡ‡Π½ΠΎ ΡΡŠΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΈΠ΅ Π½Π° Ρ‚Π°Π³Π°, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΅ Π΄Π° Π΄Π΅Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°ΠΌΠ΅ Π°Π½Π°Π»ΠΈΠ·Π° Π·Π° ΠΏΠΎΠ»Π΅Ρ‚ΠΎ tags.

Π©Π΅ създадСм индСкс blog2 с Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ ΠΈ ΠΌΠ°ΠΏΠΈΠ½Π³, ΠΏΡ€ΠΈ ΠΊΠΎΠΉΡ‚ΠΎ Π°Π½Π°Π»ΠΈΠ·ΡŠΡ‚ Π½Π° ΠΏΠΎΠ»Π΅Ρ‚ΠΎ tags Π΅ Π΄Π΅Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½:

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 поста към Ρ‚ΠΎΠ·ΠΈ индСкс (blog2). Π©Π΅ пропусна Ρ‚ΠΎΠ·ΠΈ процСс, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Ρ‚ΠΎΠΉ Π΅ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π΅Π½ Π½Π° добавянСто Π½Π° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈ Π² индСкс blog.

ΠŸΡŠΠ»Π½ΠΎΡ‚Π΅ΠΊΡΡ‚ΠΎΠ²ΠΎ Ρ‚ΡŠΡ€ΡΠ΅Π½Π΅ с ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π½Π° ΠΈΠ·Ρ€Π°Π·ΠΈ

НСка сС Π·Π°ΠΏΠΎΠ·Π½Π°Π΅ΠΌ с ΠΎΡ‰Π΅ Π΅Π΄ΠΈΠ½ Ρ‚ΠΈΠΏ заявки:

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

Бинтаксис Π½Π° заявката:

+ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π²Π° опСрация AND
| ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π²Π° опСрация OR
- ΠΎΡ‚Ρ€ΠΈΡ‡Π° СдинствСн Ρ‚ΠΎΠΊΠ΅Π½
" ΠΎΠ±Π³Ρ€ΡŠΡ‰Π° Ρ€Π΅Π΄ΠΈΡ†Π° Ρ‚ΠΎΠΊΠ΅Π½ΠΈ, Π·Π° Π΄Π° ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡ΠΈ Ρ„Ρ€Π°Π·Π° Π·Π° Ρ‚ΡŠΡ€ΡΠ΅Π½Π΅
* Π² края Π½Π° Ρ‚Π΅Ρ€ΠΌΠΈΠ½ ΠΎΠ·Π½Π°Ρ‡Π°Π²Π° заявка ΠΏΠΎ прСфикс
( ΠΈ ) ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π²Π°Ρ‚ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚
~N слСд Π΄ΡƒΠΌΠ° ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π²Π° разстояниС Π½Π° Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€Π°Π½Π΅ (ΠΏΡ€ΠΈΠ±Π»ΠΈΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ)
~N слСд Ρ„Ρ€Π°Π·Π° ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π²Π° количСство слоп
# Π½Π°ΠΉΠ΄Π΅ΠΌ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Π±Π΅Π· слова 'Ρ‰Π΅Π½ΠΊΠΈ'
curl -XPOST "$ES_URL/blog2/post/_search?pretty" -d'
{
  "query": {
    "simple_query_string": {
      "query": "-Ρ‰Π΅Π½ΠΊΠΈ",
      "fields": [
        "title^3",
        "tags^2",
        "content"
      ]
    }
  }
}'

# ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ 2 поста ΠΏΡ€ΠΎ ΠΊΠΎΡ‚ΠΈΠΊΠΎΠ²

Π’Ρ€ΡŠΠ·ΠΊΠΈ

PS

Ако Π²ΠΈ интСрСсуват ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ статии-ΡƒΡ€ΠΎΡ†ΠΈ, ΠΈΠΌΠ°Ρ‚Π΅ ΠΈΠ΄Π΅ΠΈ Π·Π° Π½ΠΎΠ²ΠΈ статии ΠΈΠ»ΠΈ прСдлоТСния Π·Π° ΡΡŠΡ‚Ρ€ΡƒΠ΄Π½ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ, Ρ‰Π΅ сС Ρ€Π°Π΄Π²Π°ΠΌ Π½Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ Π² Π»ΠΈΡ‡ΠΊΠ° ΠΈΠ»ΠΈ Π½Π° ΠΈΠΌΠ΅ΠΉΠ» m.kuzmin+habr@darkleaf.ru.

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com

ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ πŸ”₯ ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ | ProHoster