เจฒเจšเจ•เจฆเจพเจฐ เจ–เฉ‹เจœ เจฎเฉ‚เจฒ เจ—เฉฑเจฒเจพเจ‚

Elasticsearch json rest api เจฆเฉ‡ เจจเจพเจฒ เจ‡เฉฑเจ• เจ–เฉ‹เจœ เจ‡เฉฐเจœเจฃ เจนเฉˆ, Lucene เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ เจ…เจคเฉ‡ Java เจตเจฟเฉฑเจš เจฒเจฟเจ–เจฟเจ† เจ—เจฟเจ† เจนเฉˆเฅค เจ‡เจธ เจ‡เฉฐเจœเจฃ เจฆเฉ‡ เจธเจพเจฐเฉ‡ เจซเจพเจ‡เจฆเจฟเจ†เจ‚ เจฆเจพ เจตเฉ‡เจฐเจตเจพ 'เจคเฉ‡ เจ‰เจชเจฒเจฌเจง เจนเฉˆ เจธเจฐเจ•เจพเจฐเฉ€ เจตเฉˆเจฌเจธเจพเจˆเจŸ. เจ‡เจธ เจคเฉ‹เจ‚ เจฌเจพเจ…เจฆ เจ…เจธเฉ€เจ‚ Elasticsearch เจจเฉ‚เฉฐ ES เจตเจœเฉ‹เจ‚ เจธเฉฐเจฆเจฐเจญ เจ•เจฐเจพเจ‚เจ—เฉ‡เฅค

เจ‡เฉฑเจ• เจฆเจธเจคเจพเจตเฉ‡เจœเจผ เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ เจตเจฟเฉฑเจš เจ—เฉเฉฐเจเจฒเจฆเจพเจฐ เจ–เฉ‹เจœเจพเจ‚ เจฒเจˆ เจธเจฎเจพเจจ เจ‡เฉฐเจœเจฃเจพเจ‚ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เฉ€เจคเฉ€ เจœเจพเจ‚เจฆเฉ€ เจนเฉˆเฅค เจ‰เจฆเจพเจนเจฐเจจ เจฒเจˆ, เจญเจพเจธเจผเจพ เจฆเฉ‡ เจฐเฉ‚เจช เจตเจฟเจ—เจฟเจ†เจจ เจจเฉ‚เฉฐ เจงเจฟเจ†เจจ เจตเจฟเฉฑเจš เจฐเฉฑเจ–เจฆเฉ‡ เจนเฉ‹เจ เจ–เฉ‹เจœ เจ•เจฐเฉ‹ เจœเจพเจ‚ เจœเฉ€เจ“ เจ•เฉ‹เจ†เจฐเจกเฉ€เจจเฉ‡เจŸเจธ เจฆเฉเจ†เจฐเจพ เจ–เฉ‹เจœ เจ•เจฐเฉ‹เฅค

เจ‡เจธ เจฒเฉ‡เจ– เจตเจฟเจš เจฎเฉˆเจ‚ เจฌเจฒเฉŒเจ— เจชเฉ‹เจธเจŸเจพเจ‚ เจจเฉ‚เฉฐ เจ‡เฉฐเจกเฉˆเจ•เจธ เจ•เจฐเจจ เจฆเฉ€ เจ‰เจฆเจพเจนเจฐเจจ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเฉ‹เจ ES เจฆเฉ€เจ†เจ‚ เจฎเฉ‚เจฒ เจ—เฉฑเจฒเจพเจ‚ เจฌเจพเจฐเฉ‡ เจ—เฉฑเจฒ เจ•เจฐเจพเจ‚เจ—เจพ. เจฎเฉˆเจ‚ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจฆเจฟเจ–เจพเจตเจพเจ‚เจ—เจพ เจ•เจฟ เจฆเจธเจคเจพเจตเฉ‡เจœเจผเจพเจ‚ เจจเฉ‚เฉฐ เจ•เจฟเจตเฉ‡เจ‚ เจซเจฟเจฒเจŸเจฐ เจ•เจฐเจจเจพ, เจ›เจพเจ‚เจŸเจฃเจพ เจ…เจคเฉ‡ เจ–เฉ‹เจœเจฃเจพ เจนเฉˆเฅค

เจ“เจชเจฐเฉ‡เจŸเจฟเฉฐเจ— เจธเจฟเจธเจŸเจฎ 'เจคเฉ‡ เจจเจฟเจฐเจญเจฐ เจจเจพ เจนเฉ‹เจฃ เจฒเจˆ, เจฎเฉˆเจ‚ CURL เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ ES เจจเฉ‚เฉฐ เจธเจพเจฐเฉ€เจ†เจ‚ เจฌเฉ‡เจจเจคเฉ€เจ†เจ‚ เจ•เจฐเจพเจ‚เจ—เจพเฅค เจ—เฉ‚เจ—เจฒ เจ•เจฐเฉ‹เจฎ เจฒเจˆ เจ‡เฉฑเจ• เจชเจฒเฉฑเจ—เจ‡เจจ เจตเฉ€ เจนเฉˆ เจœเจฟเจธเจจเฉ‚เฉฐ เจ•เจฟเจนเจพ เจœเจพเจ‚เจฆเจพ เจนเฉˆ เจญเจพเจตเจจเจพ.

เจŸเฉˆเจ•เจธเจŸ เจตเจฟเฉฑเจš เจฆเจธเจคเจพเจตเฉ‡เจœเจผเจพเจ‚ เจ…เจคเฉ‡ เจนเฉ‹เจฐ เจธเจฐเฉ‹เจคเจพเจ‚ เจฆเฉ‡ เจฒเจฟเฉฐเจ• เจธเจผเจพเจฎเจฒ เจนเจจเฅค เจ…เฉฐเจค เจตเจฟเฉฑเจš เจฆเจธเจคเจพเจตเฉ‡เจœเจผเจพเจ‚ เจคเฉฑเจ• เจคเฉเจฐเฉฐเจค เจชเจนเฉเฉฐเจš เจฒเจˆ เจฒเจฟเฉฐเจ• เจนเจจเฅค เจตเจฟเฉฑเจš เจ…เจฃเจœเจพเจฃ เจธเจผเจฌเจฆเจพเจ‚ เจฆเฉ€เจ†เจ‚ เจชเจฐเจฟเจญเจพเจธเจผเจพเจตเจพเจ‚ เจฒเฉฑเจญเฉ€เจ†เจ‚ เจœเจพ เจธเจ•เจฆเฉ€เจ†เจ‚ เจนเจจ เจธเจผเจฌเจฆเจพเจตเจฒเฉ€.

ES เจ‡เฉฐเจธเจŸเจพเจฒ เจ•เจฐเจจเจพ

เจ…เจœเจฟเจนเจพ เจ•เจฐเจจ เจฒเจˆ, เจธเจพเจจเฉ‚เฉฐ เจชเจนเจฟเจฒเจพเจ‚ Java เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆเฅค เจตเจฟเจ•เจพเจธเจ•เจพเจฐ เจธเจฟเจซเจพเจฐเจธเจผ Java 8 เจ…เฉฑเจชเจกเฉ‡เจŸ 20 เจœเจพเจ‚ Java 7 เจ…เฉฑเจชเจกเฉ‡เจŸ 55 เจคเฉ‹เจ‚ เจจเจตเฉ‡เจ‚ เจœเจพเจตเจพ เจธเฉฐเจธเจ•เจฐเจฃ เจธเจฅเจพเจชเจค เจ•เจฐเฉ‹เฅค

ES เจตเฉฐเจก เจ‡เฉฑเจฅเฉ‡ เจ‰เจชเจฒเจฌเจง เจนเฉˆ เจกเจฟเจตเฉˆเจฒเจชเจฐ เจตเฉˆเฉฑเจฌเจธเจพเจˆเจŸ. เจ†เจฐเจ•เจพเจˆเจต เจจเฉ‚เฉฐ เจ…เจจเจชเฉˆเจ• เจ•เจฐเจจ เจคเฉ‹เจ‚ เจฌเจพเจ…เจฆ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจšเจฒเจพเจ‰เจฃ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆ bin/elasticsearch. เจตเฉ€ เจ‰เจชเจฒเจฌเจง เจนเฉˆ apt เจ…เจคเฉ‡ 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 เจตเจพเจฒเฉ‡ เจฆเจธเจคเจพเจตเฉ‡เจœเจผ เจจเฉ‚เฉฐ เจธเฉฐเจชเจพเจฆเจฟเจค เจ•เฉ€เจคเจพ เจนเฉˆ เจ…เจคเฉ‡ เจธเจพเจกเฉ‡ เจธเจพเจนเจฎเจฃเฉ‡ เจคเจฌเจฆเฉ€เจฒเฉ€เจ†เจ‚ เจฆเจฐเจœ เจ•เฉ€เจคเฉ€เจ†เจ‚ เจนเจจ, เจคเจพเจ‚ 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 เจธเจผเฉ‹เจ… เจธเจพเจฐเจฅเจ•. เจœเฉ‡เจ•เจฐ เจฌเฉ‡เจจเจคเฉ€ เจจเฉ‚เฉฐ เจ‡เฉฑเจ• เจซเจฟเจฒเจŸเจฐ เจธเฉฐเจฆเจฐเจญ เจตเจฟเฉฑเจš เจšเจฒเจพเจ‡เจ† เจœเจพเจ‚เจฆเจพ เจนเฉˆ, เจคเจพเจ‚ _score เจฎเฉเฉฑเจฒ เจนเจฎเฉ‡เจธเจผเจพเจ‚ 1 เจฆเฉ‡ เจฌเจฐเจพเจฌเจฐ เจนเฉ‹เจตเฉ‡เจ—เจพ, เจœเจฟเจธเจฆเจพ เจ…เจฐเจฅ เจนเฉˆ เจซเจฟเจฒเจŸเจฐ เจจเจพเจฒ เจชเฉ‚เจฐเจพ เจฎเฉ‡เจฒเฅค

เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจ•

เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจ• เจธเจฐเฉ‹เจค เจŸเฉˆเจ•เจธเจŸ เจจเฉ‚เฉฐ เจŸเฉ‹เจ•เจจเจพเจ‚ เจฆเฉ‡ เจธเจฎเฉ‚เจน เจตเจฟเฉฑเจš เจฌเจฆเจฒเจฃ เจฒเจˆ เจฒเฉ‹เฉœเฉ€เจ‚เจฆเจพ เจนเฉˆเฅค
เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจ• เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจนเฉเฉฐเจฆเจพ เจนเฉˆ เจŸเฉ‹เจ•เจจเจพเจˆเจœเจผเจฐ เจ…เจคเฉ‡ เจ•เจˆ เจตเจฟเจ•เจฒเจชเจฟเจ• เจŸเฉ‹เจ•เจจ เจซเจฟเจฒเจŸเจฐ. เจŸเฉ‹เจ•เจจเจพเจˆเจœเจผเจฐ เจคเฉ‹เจ‚ เจชเจนเจฟเจฒเจพเจ‚ เจ•เจˆ เจนเฉ‹ เจธเจ•เจฆเฉ‡ เจนเจจ เจšเจพเจฐเจซเจฟเจฒเจŸเจฐ. เจŸเฉ‹เจ•เจจเจพเจˆเจœเจผเจฐ เจธเจฐเฉ‹เจค เจธเจคเจฐ เจจเฉ‚เฉฐ เจŸเฉ‹เจ•เจจเจพเจ‚ เจตเจฟเฉฑเจš เจตเฉฐเจกเจฆเฉ‡ เจนเจจ, เจœเจฟเจตเฉ‡เจ‚ เจ•เจฟ เจธเจชเฉ‡เจธ เจ…เจคเฉ‡ เจตเจฟเจฐเจพเจฎ เจšเจฟเฉฐเจจเฉเจนเฅค เจŸเฉ‹เจ•เจจเจซเจฟเจฒเจŸเจฐ เจŸเฉ‹เจ•เจจเจพเจ‚ เจจเฉ‚เฉฐ เจฌเจฆเจฒ เจธเจ•เจฆเจพ เจนเฉˆ, เจฎเจฟเจŸเจพ เจธเจ•เจฆเจพ เจนเฉˆ เจœเจพเจ‚ เจจเจตเจพเจ‚ เจœเฉ‹เฉœ เจธเจ•เจฆเจพ เจนเฉˆ, เจ‰เจฆเจพเจนเจฐเจฃ เจฒเจˆ, เจธเจผเจฌเจฆ เจฆเจพ เจธเจฟเจฐเจซ เจธเจŸเฉˆเจฎ เจ›เฉฑเจกเฉ‹, เจ…เจ—เฉ‡เจคเจฐ เจนเจŸเจพเจ“, เจธเจฎเจพเจจเจพเจฐเจฅเฉ€ เจœเฉ‹เฉœเฉ‹เฅค เจšเจพเจฐเจซเจฟเจฒเจŸเจฐ - เจชเฉ‚เจฐเฉ€ เจธเจฐเฉ‹เจค เจธเจคเจฐ เจจเฉ‚เฉฐ เจฌเจฆเจฒเจฆเจพ เจนเฉˆ, เจ‰เจฆเจพเจนเจฐเจจ เจฒเจˆ, html เจŸเฉˆเจ—เจธ เจจเฉ‚เฉฐ เจ•เฉฑเจŸเจฆเจพ เจนเฉˆเฅค

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 ะฟะพัั‚ะฐ ะฟั€ะพ ะบะพั‚ะธะบะพะฒ

เจนเจตเจพเจฒเฉ‡

PS

เจœเฉ‡ เจคเฉเจธเฉ€เจ‚ เจธเจฎเจพเจจ เจฒเฉ‡เจ–เจพเจ‚-เจชเจพเจ เจพเจ‚ เจตเจฟเฉฑเจš เจฆเจฟเจฒเจšเจธเจชเฉ€ เจฐเฉฑเจ–เจฆเฉ‡ เจนเฉ‹, เจจเจตเฉ‡เจ‚ เจฒเฉ‡เจ–เจพเจ‚ เจฒเจˆ เจตเจฟเจšเจพเจฐ เจฐเฉฑเจ–เจฆเฉ‡ เจนเฉ‹, เจœเจพเจ‚ เจธเจนเจฟเจฏเฉ‹เจ— เจฒเจˆ เจชเฉเจฐเจธเจคเจพเจต เจฐเฉฑเจ–เจฆเฉ‡ เจนเฉ‹, เจคเจพเจ‚ เจฎเฉˆเจจเฉ‚เฉฐ เจจเจฟเฉฑเจœเฉ€ เจธเฉฐเจฆเฉ‡เจธเจผ เจœเจพเจ‚ เจˆเจฎเฉ‡เจฒ เจฆเฉเจ†เจฐเจพ เจธเฉเจจเฉ‡เจนเจพ เจชเฉเจฐเจพเจชเจค เจ•เจฐเจ•เฉ‡ เจ–เฉเจธเจผเฉ€ เจนเฉ‹เจตเฉ‡เจ—เฉ€ [เจˆเจฎเฉ‡เจฒ เจธเฉเจฐเฉฑเจ–เจฟเจ…เจค].

เจธเจฐเฉ‹เจค: www.habr.com