Elasticsearch json rest api เจฆเฉ เจจเจพเจฒ เจเฉฑเจ เจเฉเจ เจเฉฐเจเจฃ เจนเฉ, Lucene เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจเฉ เจ
เจคเฉ Java เจตเจฟเฉฑเจ เจฒเจฟเจเจฟเจ เจเจฟเจ เจนเฉเฅค เจเจธ เจเฉฐเจเจฃ เจฆเฉ เจธเจพเจฐเฉ เจซเจพเจเจฆเจฟเจเจ เจฆเจพ เจตเฉเจฐเจตเจพ 'เจคเฉ เจเจชเจฒเจฌเจง เจนเฉ
เจเฉฑเจ เจฆเจธเจคเจพเจตเฉเจเจผ เจกเฉเจเจพเจฌเฉเจธ เจตเจฟเฉฑเจ เจเฉเฉฐเจเจฒเจฆเจพเจฐ เจเฉเจเจพเจ เจฒเจ เจธเจฎเจพเจจ เจเฉฐเจเจฃเจพเจ เจฆเฉ เจตเจฐเจคเฉเจ เจเฉเจคเฉ เจเจพเจเจฆเฉ เจนเฉเฅค เจเจฆเจพเจนเจฐเจจ เจฒเจ, เจญเจพเจธเจผเจพ เจฆเฉ เจฐเฉเจช เจตเจฟเจเจฟเจเจจ เจจเฉเฉฐ เจงเจฟเจเจจ เจตเจฟเฉฑเจ เจฐเฉฑเจเจฆเฉ เจนเฉเจ เจเฉเจ เจเจฐเฉ เจเจพเจ เจเฉเจ เจเฉเจเจฐเจกเฉเจจเฉเจเจธ เจฆเฉเจเจฐเจพ เจเฉเจ เจเจฐเฉเฅค
เจเจธ เจฒเฉเจ เจตเจฟเจ เจฎเฉเจ เจฌเจฒเฉเจ เจชเฉเจธเจเจพเจ เจจเฉเฉฐ เจเฉฐเจกเฉเจเจธ เจเจฐเจจ เจฆเฉ เจเจฆเจพเจนเจฐเจจ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจฆเฉ เจนเฉเจ ES เจฆเฉเจเจ เจฎเฉเจฒ เจเฉฑเจฒเจพเจ เจฌเจพเจฐเฉ เจเฉฑเจฒ เจเจฐเจพเจเจเจพ. เจฎเฉเจ เจคเฉเจนเจพเจจเฉเฉฐ เจฆเจฟเจเจพเจตเจพเจเจเจพ เจเจฟ เจฆเจธเจคเจพเจตเฉเจเจผเจพเจ เจจเฉเฉฐ เจเจฟเจตเฉเจ เจซเจฟเจฒเจเจฐ เจเจฐเจจเจพ, เจเจพเจเจเจฃเจพ เจ เจคเฉ เจเฉเจเจฃเจพ เจนเฉเฅค
เจเจชเจฐเฉเจเจฟเฉฐเจ เจธเจฟเจธเจเจฎ 'เจคเฉ เจจเจฟเจฐเจญเจฐ เจจเจพ เจนเฉเจฃ เจฒเจ, เจฎเฉเจ CURL เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจเฉ ES เจจเฉเฉฐ เจธเจพเจฐเฉเจเจ เจฌเฉเจจเจคเฉเจเจ เจเจฐเจพเจเจเจพเฅค เจเฉเจเจฒ เจเจฐเฉเจฎ เจฒเจ เจเฉฑเจ เจชเจฒเฉฑเจเจเจจ เจตเฉ เจนเฉ เจเจฟเจธเจจเฉเฉฐ เจเจฟเจนเจพ เจเจพเจเจฆเจพ เจนเฉ
เจเฉเจเจธเจ เจตเจฟเฉฑเจ เจฆเจธเจคเจพเจตเฉเจเจผเจพเจ เจ
เจคเฉ เจนเฉเจฐ เจธเจฐเฉเจคเจพเจ เจฆเฉ เจฒเจฟเฉฐเจ เจธเจผเจพเจฎเจฒ เจนเจจเฅค เจ
เฉฐเจค เจตเจฟเฉฑเจ เจฆเจธเจคเจพเจตเฉเจเจผเจพเจ เจคเฉฑเจ เจคเฉเจฐเฉฐเจค เจชเจนเฉเฉฐเจ เจฒเจ เจฒเจฟเฉฐเจ เจนเจจเฅค เจตเจฟเฉฑเจ เจ
เจฃเจเจพเจฃ เจธเจผเจฌเจฆเจพเจ เจฆเฉเจเจ เจชเจฐเจฟเจญเจพเจธเจผเจพเจตเจพเจ เจฒเฉฑเจญเฉเจเจ เจเจพ เจธเจเจฆเฉเจเจ เจนเจจ
ES เจเฉฐเจธเจเจพเจฒ เจเจฐเจจเจพ
เจ
เจเจฟเจนเจพ เจเจฐเจจ เจฒเจ, เจธเจพเจจเฉเฉฐ เจชเจนเจฟเจฒเจพเจ Java เจฆเฉ เจฒเฉเฉ เจนเฉเฅค เจตเจฟเจเจพเจธเจเจพเจฐ
ES เจตเฉฐเจก เจเฉฑเจฅเฉ เจเจชเจฒเจฌเจง เจนเฉ 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"
}
เจเฉฐเจกเฉเจเจธเจฟเฉฐเจ
เจเจ 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 เจตเจพเจฒเฉ เจฆเจธเจคเจพเจตเฉเจเจผ เจจเฉเฉฐ เจธเฉฐเจชเจพเจฆเจฟเจค เจเฉเจคเจพ เจนเฉ เจ
เจคเฉ เจธเจพเจกเฉ เจธเจพเจนเจฎเจฃเฉ เจคเจฌเจฆเฉเจฒเฉเจเจ เจฆเจฐเจ เจเฉเจคเฉเจเจ เจนเจจ, เจคเจพเจ ES เจธเจพเจกเฉเจเจ เจคเจฌเจฆเฉเจฒเฉเจเจ เจจเฉเฉฐ เจธเจตเฉเจเจพเจฐ เจจเจนเฉเจ เจเจฐเฉเจเจพ, เจเจฟเจเจเจเจฟ เจเจน เจฆเจธเจคเจพเจตเฉเจเจผ เจจเฉเฉฐ เจตเจฐเจเจจ 2 เจจเจพเจฒ เจธเจเฉเจฐ เจเจฐเจฆเจพ เจนเฉเฅค
เจเฉเฉฐเจเฉ _source
เจเจธ เจตเจฟเฉฑเจ เจเจน เจฆเจธเจคเจพเจตเฉเจเจผ เจธเจผเจพเจฎเจฒ เจนเฉ เจเฉ เจ
เจธเฉเจ เจธเฉเจเฉเจฌเฉฑเจง เจเฉเจคเจพ เจนเฉเฅค ES เจเฉเจ เจเจพเจฐเจเจพเจ เจฒเจ เจเจธ เจฎเฉเฉฑเจฒ เจฆเฉ เจตเจฐเจคเฉเจ เจจเจนเฉเจ เจเจฐเจฆเจพ เจเจฟเจเจเจเจฟ เจธเฉเจเจเจพเจเจ เจเฉเจ เจฒเจ เจตเจฐเจคเฉ เจเจพเจเจฆเฉ เจนเจจเฅค เจธเจชเฉเจธ เจฌเจเจพเจเจฃ เจฒเจ, ES เจเฉฑเจ เจธเฉฐเจเฉเจเจฟเจค เจธเจฐเฉเจค เจฆเจธเจคเจพเจตเฉเจเจผ เจจเฉเฉฐ เจธเจเฉเจฐ เจเจฐเจฆเจพ เจนเฉเฅค เจเฉเจเจฐ เจธเจพเจจเฉเฉฐ เจธเจฟเจฐเจซเจผ เจเจเจกเฉ เจฆเฉ เจฒเฉเฉ เจนเฉ, เจจเจพ เจเจฟ เจชเฉเจฐเฉ เจธเจฐเฉเจค เจฆเจธเจคเจพเจตเฉเจเจผ เจฆเฉ, เจคเจพเจ เจ
เจธเฉเจ เจธเจฐเฉเจค เจธเจเฉเจฐเฉเจ เจจเฉเฉฐ เจ
เจฏเฉเจ เจเจฐ เจธเจเจฆเฉ เจนเจพเจเฅค
เจเฉเจเจฐ เจธเจพเจจเฉเฉฐ เจตเจพเจงเฉ เจเจพเจฃเจเจพเจฐเฉ เจฆเฉ เจฒเฉเฉ เจจเจนเฉเจ เจนเฉ, เจคเจพเจ เจ เจธเฉเจ เจธเจฟเจฐเจซเจผ เจธเจฐเฉเจค เจฆเฉ เจธเจฎเฉฑเจเจฐเฉ เจชเฉเจฐเจพเจชเจค เจเจฐ เจธเจเจฆเฉ เจนเจพเจ:
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
เจธเจผเฉเจ
เจตเจฟเจธเจผเจฒเฉเจธเจผเจ
เจตเจฟเจธเจผเจฒเฉเจธเจผเจ เจตเจฟเฉฑเจ เจเฉฑเจ เจนเฉเฉฐเจฆเจพ เจนเฉ
ES เจเฉเจฒ เจเจ เจนเจจ
เจเจ เจฒเจพเจญ เจเจ เจพเจเจ
# ะธัะฟะพะปัะทัะตะผ ะฐะฝะฐะปะธะทะฐัะพั 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 ะพััััััะฒััั */
}
}
}
เจเจ เจฐเฉเจธเฉ เจฆเฉ เจ เจงเจพเจฐ เจคเฉ เจธเจพเจกเฉ เจตเจฟเจธเจผเจฒเฉเจธเจผเจ เจฆเจพ เจตเจฐเจฃเจจ เจเจฐเฉเจ, เจเฉ เจเจฟ 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 ะฟะพััะฐ ะฟัะพ ะบะพัะธะบะพะฒ
เจนเจตเจพเจฒเฉ
Elastic.co เจนเจตเจพเจฒเจพ เจเจพเจเจก เจธเจผเจฌเจฆเจพเจตเจฒเฉ เจธเฉเจเจฟเฉฐเจ เจฆเจธเจคเจพเจตเฉเจเจผ เจนเฉเจฐเจพเจซเฉเจฐเฉ เจธเฉเจเจเจพเจเจ เจธเฉฐเจเจพเจฒเจจ เจฌเฉเจจเจคเฉเจเจ เจฆเฉ เจธเฉเจเฉ
PS
เจเฉ เจคเฉเจธเฉเจ เจธเจฎเจพเจจ เจฒเฉเจเจพเจ-เจชเจพเจ เจพเจ เจตเจฟเฉฑเจ เจฆเจฟเจฒเจเจธเจชเฉ เจฐเฉฑเจเจฆเฉ เจนเฉ, เจจเจตเฉเจ เจฒเฉเจเจพเจ เจฒเจ เจตเจฟเจเจพเจฐ เจฐเฉฑเจเจฆเฉ เจนเฉ, เจเจพเจ เจธเจนเจฟเจฏเฉเจ เจฒเจ เจชเฉเจฐเจธเจคเจพเจต เจฐเฉฑเจเจฆเฉ เจนเฉ, เจคเจพเจ เจฎเฉเจจเฉเฉฐ เจจเจฟเฉฑเจเฉ เจธเฉฐเจฆเฉเจธเจผ เจเจพเจ เจเจฎเฉเจฒ เจฆเฉเจเจฐเจพ เจธเฉเจจเฉเจนเจพ เจชเฉเจฐเจพเจชเจค เจเจฐเจเฉ เจเฉเจธเจผเฉ เจนเฉเจตเฉเจเฉ [เจเจฎเฉเจฒ เจธเฉเจฐเฉฑเจเจฟเจ เจค].
เจธเจฐเฉเจค: www.habr.com