Elasticsearch เบžเบทเป‰เบ™เบ–เบฒเบ™

Elasticsearch เปเบกเปˆเบ™เป€เบ„เบทเปˆเบญเบ‡เบˆเบฑเบเบŠเบญเบเบซเบฒเบ—เบตเปˆเบกเบต json rest api, เปƒเบŠเป‰ Lucene เปเบฅเบฐเบ‚เบฝเบ™เปƒเบ™ Java. เบฅเบฒเบเบฅเบฐเบญเบฝเบ”เบ‚เบญเบ‡เบ„เบงเบฒเบกเป„เบ”เป‰เบ›เบฝเบšเบ—เบฑเบ‡เบซเบกเบปเบ”เบ‚เบญเบ‡เป€เบ„เบทเปˆเบญเบ‡เบˆเบฑเบเบ™เบตเป‰เปเบกเปˆเบ™เบกเบตเบขเบนเปˆ เป€เบงเบฑเบšเป„เบŠเบ—เปŒเบ—เบฒเบ‡เบเบฒเบ™. เปƒเบ™เบชเบดเปˆเบ‡เบ—เบตเปˆเบ•เปเปˆเป„เบ›เบ™เบตเป‰เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบญเป‰เบฒเบ‡เป€เบ–เบดเบ‡ Elasticsearch เป€เบ›เบฑเบ™ ES.

เป€เบ„เบทเปˆเบญเบ‡เบˆเบฑเบเบ—เบตเปˆเบ„เป‰เบฒเบเบ„เบทเบเบฑเบ™เปเบกเปˆเบ™เปƒเบŠเป‰เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ„เบปเป‰เบ™เบซเบฒเบ—เบตเปˆเบชเบฑเบšเบชเบปเบ™เปƒเบ™เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เป€เบญเบเบฐเบชเบฒเบ™. เบ•เบปเบงเบขเปˆเบฒเบ‡, เบเบฒเบ™เบ„เบปเป‰เบ™เบซเบฒเบ„เปเบฒเบ™เบถเบ‡เป€เบ–เบดเบ‡ morphology เบ‚เบญเบ‡เบžเบฒเบชเบฒเบซเบผเบทเบ„เบปเป‰เบ™เบซเบฒเป‚เบ”เบเบžเบดเบเบฑเบ”เบ—เบฒเบ‡เบžเบนเบกเบชเบฒเบ”.

เปƒเบ™เบšเบปเบ”เบ„เบงเบฒเบกเบ™เบตเป‰เบ‚เป‰เบญเบเบˆเบฐเป€เบงเบปเป‰เบฒเบเปˆเบฝเบงเบเบฑเบšเบžเบทเป‰เบ™เบ–เบฒเบ™เบ‚เบญเบ‡ ES เป‚เบ”เบเปƒเบŠเป‰เบ•เบปเบงเบขเปˆเบฒเบ‡เบ‚เบญเบ‡เบเบฒเบ™เบ”เบฑเบ”เบชเบฐเบ™เบตเบšเบปเบ”เบ„เบงเบฒเบก blog. เบ‚เป‰เบญเบเบˆเบฐเบชเบฐเปเบ”เบ‡เบงเบดเบ—เบตเบเบฒเบ™เบเบฑเปˆเบ™เบ•เบญเบ‡, เบˆเบฑเบ”เบฎเบฝเบ‡ เปเบฅเบฐเบŠเบญเบเบซเบฒเป€เบญเบเบฐเบชเบฒเบ™.

เป€เบžเบทเปˆเบญเบšเปเปˆเปƒเบซเป‰เบ‚เบถเป‰เบ™เบเบฑเบšเบฅเบฐเบšเบปเบšเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™, เบ‚เป‰เบญเบเบˆเบฐเป€เบฎเบฑเบ”เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเบ—เบฑเบ‡เบซเบกเบปเบ”เป„เบ›เบซเบฒ ES เป‚เบ”เบเปƒเบŠเป‰ CURL. เบ™เบญเบเบˆเบฒเบเบ™เบตเป‰เบเบฑเบ‡เบกเบต plugin เบชเปเบฒเบฅเบฑเบš google chrome เบ—เบตเปˆเป€เบญเบตเป‰เบ™เบงเปˆเบฒ เบ„เบงเบฒเบกเบฎเบนเป‰เบชเบถเบ.

เบ‚เปเป‰เบ„เบงเบฒเบกเบกเบตเบฅเบดเป‰เบ‡เป„เบ›เบซเบฒเป€เบญเบเบฐเบชเบฒเบ™ เปเบฅเบฐเปเบซเบผเปˆเบ‡เบญเบทเปˆเบ™เป†. เปƒเบ™เบ•เบญเบ™เบ—เป‰เบฒเบเบกเบตเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เป„เบงเบเบฑเบšเป€เบญเบเบฐเบชเบฒเบ™. เบ„เปเบฒเบ™เบดเบเบฒเบกเบ‚เบญเบ‡เบ„เปเบฒเบชเบฑเบšเบ—เบตเปˆเบšเปเปˆเบ„เบธเป‰เบ™เป€เบ„เบตเบเบชเบฒเบกเบฒเบ”เบžเบปเบšเป„เบ”เป‰เปƒเบ™ เบ„เบณ เบชเบฑเบš.

เบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡ ES

เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เบชเบดเปˆเบ‡เบ™เบตเป‰, เบ—เปเบฒเบญเบดเบ”เบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™ Java. เบ™เบฑเบเบžเบฑเบ”เบ—เบฐเบ™เบฒ เปเบ™เบฐ เบ™เบณ เบ•เบดเบ”เบ•เบฑเป‰เบ‡ Java เบฅเบธเป‰เบ™เปƒเปเปˆเบเบงเปˆเบฒ Java 8 update 20 เบซเบผเบท Java 7 update 55.

เบเบฒเบ™เปเบˆเบเบขเบฒเบ ES เปเบกเปˆเบ™เบกเบตเบขเบนเปˆ เป€เบงเบฑเบšเป„เบŠเบ—เปŒเบ™เบฑเบเบžเบฑเบ”เบ—เบฐเบ™เบฒ. เบซเบผเบฑเบ‡เบˆเบฒเบ unpacking archive เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™ 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 เปเบฅเบฐ เบ›เบฐเป€เบžเบ” เบ•เบญเบš. เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เปเบ•เป‰เบกเบเบฒเบ™เบ›เบฝเบšเบ—เบฝเบšเบ—เบตเปˆเบกเบตเป€เบ‡เบทเปˆเบญเบ™เป„เบ‚: เบ”เบฑเบ”เบŠเบฐเบ™เบตเปเบกเปˆเบ™เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™, เปเบฅเบฐเบ›เบฐเป€เบžเบ”เปเบกเปˆเบ™เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เปƒเบ™เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ™เบตเป‰. เปเบ•เปˆเบฅเบฐเบ›เบฐเป€เบžเบ”เบกเบตเป‚เบ„เบ‡เบเบฒเบ™เบ‚เบญเบ‡เบ•เบปเบ™เป€เบญเบ‡ โˆ’ เปเบœเบ™เบ—เบตเปˆ, เบ„เบทเบเบฑเบ™เบเบฑเบšเบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบเบฒเบ™เบžเบปเบงเบžเบฑเบ™. เบเบฒเบ™เบชเป‰เบฒเบ‡เปเบœเบ™เบ—เบตเปˆเบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เป€เบกเบทเปˆเบญเป€เบญเบเบฐเบชเบฒเบ™เบ–เบทเบเบ”เบฑเบ”เบชเบฐเบ™เบต:

# ะŸะพะปัƒั‡ะธะผ 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 เบšเปเปˆเป„เบ”เป‰เปเบเบเบ„เบงเบฒเบกเปเบ•เบเบ•เปˆเบฒเบ‡เบฅเบฐเบซเบงเปˆเบฒเบ‡เบ„เปˆเบฒเบ”เบฝเบงเปเบฅเบฐ array เบ‚เบญเบ‡เบ„เปˆเบฒ. เบชเปเบฒเบฅเบฑเบšเบ•เบปเบงเบขเปˆเบฒเบ‡, เบžเบฒเบเบชเบฐเบซเบ™เบฒเบกเบซเบปเบงเบ‚เปเป‰เบžเบฝเบ‡เปเบ•เปˆเบ›เบฐเบเบญเบšเบ”เป‰เบงเบเบซเบปเบงเบ‚เปเป‰, เปเบฅเบฐเบžเบฒเบเบชเบฐเบซเบ™เบฒเบก tags เบกเบต array เบ‚เบญเบ‡ strings, เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบžเบงเบเบกเบฑเบ™เบˆเบฐเบ–เบทเบเบชเบฐเปเบ”เบ‡เปƒเบ™เปเบšเบšเบ”เบฝเบงเบเบฑเบ™เปƒเบ™เปเบœเบ™เบ—เบตเปˆ.
เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเป€เบงเบปเป‰เบฒเป€เบžเบตเปˆเบกเป€เบ•เบตเบกเบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เบชเป‰เบฒเบ‡เปเบœเบ™เบ—เบตเปˆเปƒเบ™เบžเบฒเบเบซเบผเบฑเบ‡.

เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เป

เบ”เบถเบ‡เป€เบญเบปเบฒเป€เบญเบเบฐเบชเบฒเบ™เป‚เบ”เบ 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"
  }
}

เบเบฐเปเบˆเปƒเปเปˆเบ›เบฒเบเบปเบ”เบขเบนเปˆเปƒเบ™เบ„เบณเบ•เบญเบš: _version ะธ _source. เป‚เบ”เบเบ—เบปเปˆเบงเป„เบ›, เบ„เบตเบ—เบฑเบ‡เบซเบกเบปเบ”เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ”เป‰เบงเบ _ เบ–เบทเบเบˆเบฑเบ”เบ›เบฐเป€เบžเบ”เป€เบ›เบฑเบ™เบ—เบฒเบ‡เบเบฒเบ™.

Key _version เบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เบชเบฐเบšเบฑเบšเป€เบญเบเบฐเบชเบฒเบ™. เบกเบฑเบ™เป€เบ›เบฑเบ™เบชเบดเปˆเบ‡เบˆเปเบฒเป€เบ›เบฑเบ™เบชเปเบฒเบฅเบฑเบšเบเบปเบ™เป„เบเบเบฒเบ™เบฅเบฑเบญเบเปƒเบ™เปเบ‡เปˆเบ”เบตเบ—เบตเปˆเบˆเบฐเป€เบฎเบฑเบ”เบงเบฝเบ. เบ•เบปเบงเบขเปˆเบฒเบ‡, เบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เบ›เปˆเบฝเบ™เป€เบญเบเบฐเบชเบฒเบ™เบ—เบตเปˆเบกเบตเบชเบฐเบšเบฑเบš 1. เบžเบงเบเป€เบฎเบปเบฒเบชเบปเปˆเบ‡เป€เบญเบเบฐเบชเบฒเบ™เบ—เบตเปˆเบกเบตเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เปเบฅเบฐเบŠเบตเป‰เปƒเบซเป‰เป€เบซเบฑเบ™เบงเปˆเบฒเบ™เบตเป‰เปเบกเปˆเบ™เบเบฒเบ™เปเบเป‰เป„เบ‚เป€เบญเบเบฐเบชเบฒเบ™เบ—เบตเปˆเบกเบตเบชเบฐเบšเบฑเบš 1. เบ–เป‰เบฒเบ„เบปเบ™เบญเบทเปˆเบ™เปเบเป‰เป„เบ‚เป€เบญเบเบฐเบชเบฒเบ™เบ—เบตเปˆเบกเบตเบชเบฐเบšเบฑเบš 1 เปเบฅเบฐเบชเบปเปˆเบ‡เบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบเปˆเบญเบ™เบžเบงเบเป€เบฎเบปเบฒ, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™. ES เบˆเบฐเบšเปเปˆเบเบญเบกเบฎเบฑเบšเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ, เป€เบžเบฒเบฐเบงเปˆเบฒ เบกเบฑเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเป€เบญเบเบฐเบชเบฒเบ™เบ—เบตเปˆเบกเบตเบชเบฐเบšเบฑเบš 2.

Key _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 เปƒเบ™เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเบ›เบฐเบเบญเบšเบกเบต array เบ‚เบญเบ‡เบˆเปเบฒเบ™เบงเบ™เป€เบ•เบฑเบกเบ—เบตเปˆเบเบฒเบ™เบˆเบฑเบ”เบฅเบฝเบ‡เปเบกเปˆเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”. เป€เบซเบผเบปเปˆเบฒเบ™เบฑเป‰เบ™. เบงเบฑเบ™เบ—เบตเป„เบ”เป‰เบ–เบทเบเบ›เปˆเบฝเบ™เป€เบ›เบฑเบ™เบˆเปเบฒเบ™เบงเบ™เป€เบ•เบฑเบก. เบ‚เปเป‰เบกเบนเบ™เป€เบžเบตเปˆเบกเป€เบ•เบตเบกเบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เบˆเบฑเบ”เบฎเบฝเบ‡เบชเบฒเบกเบฒเบ”เบžเบปเบšเป„เบ”เป‰เปƒเบ™ เป€เบญเบเบฐเบชเบฒเบ™.

เบเบฒเบ™เบเบฑเปˆเบ™เบ•เบญเบ‡เปเบฅเบฐเบเบฒเบ™เบชเบญเบšเบ–เบฒเบก

ES เบ™เบฑเบšเบ•เบฑเป‰เบ‡เปเบ•เปˆเบฎเบธเปˆเบ™ 2 เบšเปเปˆเป„เบ”เป‰เบˆเปเบฒเปเบ™เบเบฅเบฐเบซเบงเปˆเบฒเบ‡เบ•เบปเบงเบเบญเบ‡เปเบฅเบฐเบเบฒเบ™เบชเบญเบšเบ–เบฒเบก, เปเบ—เบ™เบ—เบตเปˆเบˆเบฐ เปเบ™เบงเบ„เบงเบฒเบกเบ„เบดเบ”เบ‚เบญเบ‡เบชเบฐเบžเบฒเบšเบเบฒเบ™เป„เบ”เป‰เบ–เบทเบเบ™เปเบฒเบชเบฐเป€เบซเบ™เบต.
เบšเปเบฅเบดเบšเบปเบ”เบเบฒเบ™เบชเบญเบšเบ–เบฒเบกเปเบ•เบเบ•เปˆเบฒเบ‡เบˆเบฒเบเบšเปเบฅเบดเบšเบปเบ”เบเบฒเบ™เบเบฑเปˆเบ™เบ•เบญเบ‡เบ—เบตเปˆ query เบชเป‰เบฒเบ‡ _score เปเบฅเบฐเบšเปเปˆเป„เบ”เป‰เบ–เบทเบเป€เบเบฑเบšเป„เบงเป‰. เบ‚เป‰เบญเบเบˆเบฐเบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบˆเบปเป‰เบฒเบฎเบนเป‰เบงเปˆเบฒ _score เปเบกเปˆเบ™เบซเบเบฑเบ‡เบ•เปเปˆเบกเบฒ.

เบเบฑเปˆเบ™เบ•เบญเบ‡เบ•เบฒเบกเบงเบฑเบ™เบ—เบต

เบžเบงเบเป€เบฎเบปเบฒเปƒเบŠเป‰เบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เป เบฅเบฐเบ”เบฑเบš เปƒเบ™เบชเบฐเบžเบฒเบšเบเบฒเบ™เบ‚เบญเบ‡เบเบฒเบ™เบเบฑเปˆเบ™เบ•เบญเบ‡:

# ะฟะพะปัƒั‡ะธะผ ะฟะพัั‚ั‹, ะพะฟัƒะฑะปะธะบะพะฒะฐะฝะฝั‹ะต 1ะพะณะพ ัะตะฝั‚ัะฑั€ั ะธะปะธ ะฟะพะทะถะต
curl -XGET "$ES_URL/blog/post/_search?pretty" -d'
{
  "filter": {
    "range": {
      "published_at": { "gte": "2014-09-01" }
    }
  }
}'

เบเบฑเปˆเบ™เบ•เบญเบ‡เบ•เบฒเบกเปเบ—เบฑเบ

เบžเบงเบเป€เบฎเบปเบฒเปƒเบŠเป‰ เบเบฒเบ™เบชเบญเบšเบ–เบฒเบกเป„เบฅเบเบฐ เป€เบžเบทเปˆเบญเบŠเบญเบเบซเบฒ ids เป€เบญเบเบฐเบชเบฒเบ™เบ—เบตเปˆเบกเบตเบ„เปเบฒเบ—เบตเปˆเปƒเบซเป‰:

# ะฝะฐะนะดะตะผ ะฒัะต ะดะพะบัƒะผะตะฝั‚ั‹, ะฒ ะฟะพะปะต 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>

เบžเบงเบเป€เบฎเบปเบฒเปƒเบŠเป‰ เบ„เปเบฒโ€‹เบ–เบฒเบกโ€‹เบ—เบตเปˆโ€‹เบเบปเบ‡โ€‹เบเบฑเบ™โ€‹ เป€เบžเบทเปˆเบญเบŠเบญเบเบซเบฒ ids เป€เบญเบเบฐเบชเบฒเบ™เบ—เบตเปˆเบกเบตเบ„เปเบฒเบ—เบตเปˆเปƒเบซเป‰:

# 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, เบŠเบถเปˆเบ‡เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเบเบฒเบ™เบˆเบฑเบšเบ„เบนเปˆเบขเปˆเบฒเบ‡เบชเบปเบกเบšเบนเบ™เบเบฑเบšเบ•เบปเบงเบเบญเบ‡.

เบ™เบฑเบเบงเบดเป€เบ„เบฒเบฐ

เบ™เบฑเบเบงเบดเป€เบ„เบฒเบฐ เปเบกเปˆเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เป€เบžเบทเปˆเบญเบ›เปˆเบฝเบ™เบ‚เปเป‰เบ„เบงเบฒเบกเปเบซเบผเปˆเบ‡เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบŠเบธเบ”เบ‚เบญเบ‡ tokens.
เบ™เบฑเบเบงเบดเป€เบ„เบฒเบฐเบ›เบฐเบเบญเบšเบ”เป‰เบงเบเบซเบ™เบถเปˆเบ‡ เป€เบ„เบทเปˆเบญเบ‡เป‚เบ—เป€เบ„เบฑเบ™ เปเบฅเบฐเบซเบผเบฒเบเบ—เบฒเบ‡เป€เบฅเบทเบญเบ เบเบฒเบ™เบเบฑเปˆเบ™เบ•เบญเบ‡เป‚เบ—เป€เบ„เบฑเบ™. Tokenizer เบญเบฒเบ”เบˆเบฐเบ–เบทเบเบ™เปเบฒเบซเบ™เป‰เบฒเป‚เบ”เบเบซเบผเบฒเบเป†เบญเบฑเบ™ เบ•เบปเบงเบเบฑเปˆเบ™เบ•เบญเบ‡. Tokenizers เปเบเบเบชเบฐเบ•เบฃเบดเบ‡เบ•เบปเป‰เบ™เบชเบฐเบšเบฑเบšเบญเบญเบเป€เบ›เบฑเบ™ tokens เป€เบŠเบฑเปˆเบ™: เบเบฐเบซเบงเปˆเบฒเบ‡ เปเบฅเบฐเป€เบ„เบทเปˆเบญเบ‡เปเบฒเบเบงเบฑเบเบ•เบญเบ™. TokenFilter เบชเบฒเบกเบฒเบ”เบ›เปˆเบฝเบ™ tokens, เบฅเบถเบšเบซเบผเบทเป€เบžเบตเปˆเบกเบญเบฑเบ™เปƒเบซเบกเปˆ, เบชเปเบฒเบฅเบฑเบšเบ•เบปเบงเบขเปˆเบฒเบ‡, เบ›เปˆเบญเบเปƒเบซเป‰เบžเบฝเบ‡เปเบ•เปˆเบฅเปเบฒเบ•เบปเป‰เบ™เบ‚เบญเบ‡เบ„เปเบฒ, เป€เบญเบปเบฒ prepositions, เป€เบžเบตเปˆเบกเบ„เปเบฒเบชเบฑเบšเบ„เป‰เบฒเบเบ„เบท. CharFilter - เบ›เปˆเบฝเบ™เปเบ›เบ‡ string เปเบซเบผเปˆเบ‡เบ—เบฑเบ‡เบซเบกเบปเบ”, เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบเบปเบเบ•เบปเบงเบขเปˆเบฒเบ‡, เบ•เบฑเบ”เบญเบญเบ tags html.

ES เบกเบตเบซเบผเบฒเบ เป€เบ„เบทเปˆเบญเบ‡เบงเบดเป€เบ„เบฒเบฐเบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™. เบชเปเบฒเบฅเบฑเบšเบ•เบปเบงเบขเปˆเบฒเบ‡, เบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐ เบžเบฒเบชเบฒเบฅเบฑเบ”เป€เบŠเบ.

เปƒเบซเป‰เป€เบฎเบปเบฒเปƒเบŠเป‰เบ›เบฐเป‚เบซเบเบ” 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, CharFilter เปƒเบ”เบ—เบตเปˆเบ™เบฑเบเบงเบดเป€เบ„เบฒเบฐเบฅเบฑเบ”เป€เบŠเบเปƒเบŠเป‰:

{
  "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 ะพั‚ััƒั‚ัั‚ะฒัƒัŽั‚ */
    }
  }
}

เปƒเบซเป‰เบญเบฐเบ—เบดเบšเบฒเบเบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆเบžเบฒเบชเบฒเบฅเบฑเบ”เป€เบŠเบ, เป€เบŠเบดเปˆเบ‡เบˆเบฐเบ•เบฑเบ”เบญเบญเบ tags 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"
      ]
    }
  }
}

เบซเบ™เป‰เบฒเบ—เปเบฒเบญเบดเบ”, tags HTML เบ—เบฑเบ‡เบซเบกเบปเบ”เบˆเบฐเบ–เบทเบเป‚เบเบเบเป‰เบฒเบเบญเบญเบเบˆเบฒเบ string เปเบซเบผเปˆเบ‡, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™ tokenizer เบˆเบฐเปเบšเปˆเบ‡เบญเบญเบเป€เบ›เบฑเบ™ tokens, tokens เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเบˆเบฐเบเป‰เบฒเบเบญเบญเบเป„เบ›เปƒเบ™เบ•เบปเบงเบžเบดเบกเบ™เป‰เบญเบ, เบ„เปเบฒเบ—เบตเปˆเบšเปเปˆเบชเปเบฒเบ„เบฑเบ™เบˆเบฐเบ–เบทเบเบฅเบถเบšเบญเบญเบ, เปเบฅเบฐ tokens เบ—เบตเปˆเบเบฑเบ‡เป€เบซเบผเบทเบญเบˆเบฐเบเบฑเบ‡เบ„เบปเบ‡เป€เบ›เบฑเบ™ stem เบ‚เบญเบ‡เบ„เปเบฒเบชเบฑเบš.

เบเบฒเบ™เบชเป‰เบฒเบ‡เบ”เบฑเบ”เบชเบฐเบ™เบต

เบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบญเบฐเบ—เบดเบšเบฒเบเป€เบ„เบทเปˆเบญเบ‡เบงเบดเป€เบ„เบฒเบฐเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™. เบกเบฑเบ™เบˆเบฐเปƒเบŠเป‰เบเบฑเบšเบŠเปˆเบญเบ‡เบชเบฐเบ•เบฃเบดเบ‡เบ—เบฑเบ‡เปเบปเบ”. เป‚เบžเบชเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเบกเบตเปเบ—เบฑเบเบซเบผเบฒเบเบญเบฑเบ™, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เปเบ—เบฑเบเบˆเบฐเบ–เบทเบเบ›เบฐเบกเบงเบ™เบœเบปเบ™เป‚เบ”เบเบ™เบฑเบเบงเบดเป€เบ„เบฒเบฐ. เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒ เบžเบงเบเป€เบฎเบปเบฒเบเปเบฒเบฅเบฑเบ‡เบŠเบญเบเบซเบฒเบ‚เปเป‰เบ„เบงเบฒเบกเป‚เบ”เบเบเบปเบ‡เบเบฑเบšเปเบ—เบฑเบ, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบžเบงเบเป€เบฎเบปเบฒเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบ›เบดเบ”เบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐเบชเปเบฒเบฅเบฑเบšเบžเบฒเบเบชเบฐเบซเบ™เบฒเบก tags.

เปƒเบซเป‰เบžเบงเบเป€เบฎเบปเบฒเบชเป‰เบฒเบ‡ index 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"
      ]
    }
  }
}'

เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒ เบžเบงเบเป€เบฎเบปเบฒเบเปเบฒเบฅเบฑเบ‡เปƒเบŠเป‰เป€เบ„เบทเปˆเบญเบ‡เบงเบดเป€เบ„เบฒเบฐเบ—เบตเปˆเบกเบต stemming เบžเบฒเบชเบฒเบฅเบฑเบ”เป€เบŠเบ, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเบ™เบตเป‰เบˆเบฐเบชเบปเปˆเบ‡เบ„เบทเบ™เป€เบญเบเบฐเบชเบฒเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”, เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบžเบงเบเบกเบฑเบ™เบกเบตเบžเบฝเบ‡เปเบ•เปˆเบ„เปเบฒเบงเปˆเบฒ 'เบ›เบฐเบซเบงเบฑเบ”เบชเบฒเบ”'.

เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเบญเบฒเบ”เบกเบตเบ•เบปเบงเบญเบฑเบเบชเบญเบ™เบžเบดเป€เบชเบ”, เบ•เบปเบงเบขเปˆเบฒเบ‡:

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

เบฎเป‰เบญเบ‡เบ‚เป 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 ะฟะพัั‚ะฐ ะฟั€ะพ ะบะพั‚ะธะบะพะฒ

เป€เบญเบเบฐเบชเบฒเบ™

PS

เบ–เป‰เบฒเบซเบฒเบเบงเปˆเบฒเบ—เปˆเบฒเบ™เบกเบตเบ„เบงเบฒเบกเบชเบปเบ™เปƒเบˆเปƒเบ™เบšเบปเบ”เบ„เบงเบฒเบกเบ—เบตเปˆเบ„เป‰เบฒเบเบ„เบทเบเบฑเบ™ - เบšเบปเบ”เบฎเบฝเบ™, เบกเบตเปเบ™เบงเบ„เบงเบฒเบกเบ„เบดเบ”เบชเปเบฒเบฅเบฑเบšเบšเบปเบ”เบ„เบงเบฒเบกเปƒเบซเบกเปˆ, เบซเบผเบทเบกเบตเบเบฒเบ™เบชเบฐเป€เบซเบ™เบตเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบฎเปˆเบงเบกเบกเบท, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบเบดเบ™เบ”เบตเบ—เบตเปˆเบˆเบฐเป„เบ”เป‰เบฎเบฑเบšเบ‚เปเป‰เบ„เบงเบฒเบกเปƒเบ™เบ‚เปเป‰เบ„เบงเบฒเบกเบชเปˆเบงเบ™เบšเบธเบเบ„เบปเบ™เบซเบผเบทเบ—เบฒเบ‡เบญเบตเป€เบกเบฅเปŒ. [email protected].

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: www.habr.com