เชธเซเชฅเชฟเชคเชฟเชธเซเชฅเชพเชชเช• เชถเซ‹เชง เชฌเซ‡เชเชฟเช•เซเชธ

เช‡เชฒเชพเชธเซเชŸเชฟเช•เชธเชฐเซเชš เช JSON REST API เชงเชฐเชพเชตเชคเซเช‚ เชธเชฐเซเชš เชเชจเซเชœเชฟเชจ เช›เซ‡, เชœเซ‡ Lucene เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‡ เช›เซ‡ เช…เชจเซ‡ เชœเชพเชตเชพเชฎเชพเช‚ เชฒเช–เชพเชฏเซ‡เชฒเซเช‚ เช›เซ‡. เช† เชเชจเซเชœเชฟเชจเชจเชพ เชฌเชงเชพ เชซเชพเชฏเชฆเชพเช“เชจเซเช‚ เชตเชฐเซเชฃเชจ เช…เชนเซ€เช‚ เช‰เชชเชฒเชฌเซเชง เช›เซ‡ เชธเชคเซเชคเชพเชตเชพเชฐ เชตเซ‡เชฌเชธเชพเช‡เชŸเชนเชตเซ‡เชฅเซ€, เช†เชชเชฃเซ‡ เช‡เชฒเชพเชธเซเชŸเชฟเช•เชธเชฐเซเชšเชจเซ‡ ES เชคเชฐเซ€เช•เซ‡ เช“เชณเช–เซ€เชถเซเช‚.

เช†เชตเชพ เชเชจเซเชœเชฟเชจเชจเซ‹ เช‰เชชเชฏเซ‹เช— เชœเชŸเชฟเชฒ เชฆเชธเซเชคเชพเชตเซ‡เชœ เชกเซ‡เชŸเชพเชฌเซ‡เช เชถเซ‹เชง เชฎเชพเชŸเซ‡ เชฅเชพเชฏ เช›เซ‡, เชœเซ‡เชฎ เช•เซ‡ เชญเชพเชทเชพ เช†เช•เชพเชฐเชถเชพเชธเซเชคเซเชฐเชจเชพ เช†เชงเชพเชฐเซ‡ เชถเซ‹เชง เช…เชฅเชตเชพ เชญเซŒเช—เซ‹เชฒเชฟเช• เช•เซ‹เช“เชฐเซเชกเชฟเชจเซ‡เชŸเซเชธ เชฆเซเชตเชพเชฐเชพ เชถเซ‹เชง.

เช† เชฒเซ‡เช–เชฎเชพเช‚, เชนเซเช‚ เชฌเซเชฒเซ‹เช— เชชเซ‹เชธเซเชŸเซเชธเชจเซ‡ เช‡เชจเซเชกเซ‡เช•เซเชธ เช•เชฐเชตเชพเชจเชพ เช‰เชฆเชพเชนเชฐเชฃเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ ES เชจเซ€ เชฎเซ‚เชณเชญเซ‚เชค เชฌเชพเชฌเชคเซ‹เชจเซ‡ เช†เชตเชฐเซ€ เชฒเชˆเชถ. เชนเซเช‚ เชคเชฎเชจเซ‡ เชฌเชคเชพเชตเซ€เชถ เช•เซ‡ เชฆเชธเซเชคเชพเชตเซ‡เชœเซ‹เชจเซ‡ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชซเชฟเชฒเซเชŸเชฐ เช•เชฐเชตเชพ, เชธเซ‰เชฐเซเชŸ เช•เชฐเชตเชพ เช…เชจเซ‡ เชถเซ‹เชงเชตเชพ.

เช“เชชเชฐเซ‡เชŸเชฟเช‚เช— เชธเชฟเชธเซเชŸเชฎเชฅเซ€ เชธเซเชตเชคเช‚เชคเซเชฐ เชฐเชนเซ‡เชตเชพ เชฎเชพเชŸเซ‡, เชนเซเช‚ เชฎเชพเชฐเซ€ เชฌเชงเซ€ ES เชตเชฟเชจเช‚เชคเซ€เช“ CURL เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เช•เชฐเซ€เชถ. เช—เซ‚เช—เชฒ เช•เซเชฐเซ‹เชฎ เชฎเชพเชŸเซ‡ เชเช• เชชเซเชฒเช—เช‡เชจ เชชเชฃ เช›เซ‡ เชœเซ‡เชจเซ‡ เช…เชฐเซเชฅ.

เชฆเชธเซเชคเชพเชตเซ‡เชœเซ€เช•เชฐเชฃ เช…เชจเซ‡ เช…เชจเซเชฏ เชธเซเชฐเซ‹เชคเซ‹เชจเซ€ เชฒเชฟเช‚เช•เซเชธ เชธเชฎเช—เซเชฐ เชŸเซ‡เช•เซเชธเซเชŸเชฎเชพเช‚ เช†เชชเชตเชพเชฎเชพเช‚ เช†เชตเซ€ เช›เซ‡. เชฆเชธเซเชคเชพเชตเซ‡เชœเซ€เช•เชฐเชฃเชจเซ€ เชเชกเชชเซ€ เชเช•เซเชธเซ‡เชธ เชฒเชฟเช‚เช•เซเชธ เช…เช‚เชคเซ‡ เช†เชชเชตเชพเชฎเชพเช‚ เช†เชตเซ€ เช›เซ‡. เช…เชœเชพเชฃเซเชฏเชพ เชถเชฌเซเชฆเซ‹เชจเซ€ เชตเซเชฏเชพเช–เซเชฏเชพเช“ เช†เชฎเชพเช‚ เชฎเชณเซ€ เชถเช•เซ‡ เช›เซ‡ เชถเชฌเซเชฆเช•เซ‹เชทเซ‹.

ES เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช•เชฐเซ€ เชฐเชนเซเชฏเซเช‚ เช›เซ‡

เช† เชฎเชพเชŸเซ‡ เช†เชชเชฃเชจเซ‡ เชชเชนเซ‡เชฒเชพ เชœเชพเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡. เชกเซ‡เชตเชฒเชชเชฐเซเชธ เชญเชฒเชพเชฎเชฃ เชœเชพเชตเชพ 8 เช…เชชเชกเซ‡เชŸ 20 เช…เชฅเชตเชพ เชœเชพเชตเชพ 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 เชฆเซเชตเชพเชฐเชพ เช•เชพเชขเชตเชพ:

# ะธะทะฒะปะตั‡ะตะผ ะดะพะบัƒะผะตะฝั‚ ั 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 เชฎเซ‚เชณ เชฆเชธเซเชคเชพเชตเซ‡เชœเชจเชพ เชธเช‚เช•เซเชšเชฟเชค เชธเช‚เชธเซเช•เชฐเชฃเชจเซ‡ เชธเช‚เช—เซเชฐเชนเชฟเชค เช•เชฐเซ‡ เช›เซ‡. เชœเซ‹ เช†เชชเชฃเชจเซ‡ เชซเช•เซเชค 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"
}'

เชธortเชฐเซเชŸเชฟเช‚เช—

# ะฝะฐะนะดะตะผ ะฟะพัะปะตะดะฝะธะน ะฟะพัั‚ ะฟะพ ะดะฐั‚ะต ะฟัƒะฑะปะธะบะฐั†ะธะธ ะธ ะธะทะฒะปะตั‡ะตะผ ะฟะพะปั 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 เช†เช‰เชŸเชชเซเชŸเชฎเชพเช‚ เชชเซ‚เชฐเซเชฃเชพเช‚เช•เซ‹เชจเซ‹ เชเช• เชเชฐเซ‡ เชนเซ‹เชฏ เช›เซ‡ เชœเซ‡เชจเชพ เชฆเซเชตเชพเชฐเชพ เชธเซ‰เชฐเซเชŸเชฟเช‚เช— เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡. เชเชŸเชฒเซ‡ เช•เซ‡, เชคเชพเชฐเซ€เช– เชชเซ‚เชฐเซเชฃเชพเช‚เช•เชฎเชพเช‚ เชฐเซ‚เชชเชพเช‚เชคเชฐเชฟเชค เชฅเชˆ เช—เชˆ เช›เซ‡. เชธเซ‰เชฐเซเชŸเชฟเช‚เช— เชตเชฟเชถเซ‡ เชตเชงเซ เชฎเชพเชนเชฟเชคเซ€ เช…เชนเซ€เช‚ เชฎเชณเซ€ เชถเช•เซ‡ เช›เซ‡ เชฆเชธเซเชคเชพเชตเซ‡เชœเซ€เช•เชฐเชฃ.

เชซเชฟเชฒเซเชŸเชฐเซเชธ เช…เชจเซ‡ เช•เซเชตเซ‡เชฐเซ€เช

เชตเชฐเซเชเชจ 2 เชฅเซ€ ES เชซเชฟเชฒเซเชŸเชฐเซเชธ เช…เชจเซ‡ เช•เซเชตเซ‡เชฐเซ€เช เชตเชšเซเชšเซ‡ เชคเชซเชพเชตเชค เช•เชฐเชคเซเช‚ เชจเชฅเซ€, เชคเซ‡เชจเชพ เชฌเชฆเชฒเซ‡ เชธเช‚เชฆเชฐเซเชญเซ‹เชจเซ‹ เช–เซเชฏเชพเชฒ เชฐเชœเซ‚ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซ‹ เช›เซ‡.
เช•เซเชตเซ‡เชฐเซ€ เชธเช‚เชฆเชฐเซเชญ เชซเชฟเชฒเซเชŸเชฐ เชธเช‚เชฆเชฐเซเชญเชฅเซ€ เช…เชฒเช— เช›เซ‡ เช•เชพเชฐเชฃ เช•เซ‡ เช•เซเชตเซ‡เชฐเซ€ _score เชœเชจเชฐเซ‡เชŸ เช•เชฐเซ‡ เช›เซ‡ เช…เชจเซ‡ เช•เซ‡เชถ เชฅเชคเซ€ เชจเชฅเซ€. เชนเซเช‚ เชชเช›เซ€เชฅเซ€ เชธเชฎเชœเชพเชตเซ€เชถ เช•เซ‡ _score เชถเซเช‚ เช›เซ‡.

เชคเชพเชฐเซ€เช– เชฆเซเชตเชพเชฐเชพ เชซเชฟเชฒเซเชŸเชฐ เช•เชฐเซ‹

เช•เซเชตเซ‡เชฐเซ€เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชถเซเชฐเซ‡เชฃเซ€ เชซเชฟเชฒเซเชŸเชฐเชจเชพ เชธเช‚เชฆเชฐเซเชญเชฎเชพเช‚:

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

เชŸเซ…เช—เซเชธ เชฆเซเชตเชพเชฐเชพ เชซเชฟเชฒเซเชŸเชฐ เช•เชฐเซ‹

เช…เชฎเซ‡ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เช เช›เซ€เช เชถเชฌเซเชฆ เช•เซเชตเซ‡เชฐเซ€ เช†เชชเซ‡เชฒ เชถเชฌเซเชฆ เชงเชฐเชพเชตเชคเชพ เชฆเชธเซเชคเชพเชตเซ‡เชœ 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" : [ "ะบะพั‚ัั‚ะฐ" ]
      }
    } ]
  }
}

เชธเช‚เชชเซ‚เชฐเซเชฃ เชŸเซ‡เช•เซเชธเซเชŸ เชถเซ‹เชง

เช…เชฎเชพเชฐเชพ เชคเซเชฐเชฃ เชฆเชธเซเชคเชพเชตเซ‡เชœเซ‹เชฎเชพเช‚ เชธเชพเชฎเช—เซเชฐเซ€ เช•เซเชทเซ‡เชคเซเชฐเชฎเชพเช‚ เชจเซ€เชšเซ‡ เชฎเซเชœเชฌ เช›เซ‡:

  • <p>ะกะผะตัˆะฝะฐั ะธัั‚ะพั€ะธั ะฟั€ะพ ะบะพั‚ัั‚<p>
  • <p>ะกะผะตัˆะฝะฐั ะธัั‚ะพั€ะธั ะฟั€ะพ ั‰ะตะฝะบะพะฒ<p>
  • <p>ะ”ัƒัˆะตั€ะฐะทะดะธั€ะฐัŽั‰ะฐั ะธัั‚ะพั€ะธั ะฟั€ะพ ะฑะตะดะฝะพะณะพ ะบะพั‚ะตะฝะบะฐ ั ัƒะปะธั†ั‹<p>

เช…เชฎเซ‡ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เช เช›เซ€เช เชฎเซ‡เชš เช•เซเชตเซ‡เชฐเซ€ เช†เชชเซ‡เชฒ เชถเชฌเซเชฆ เชงเชฐเชพเชตเชคเชพ เชฆเชธเซเชคเชพเชตเซ‡เชœ 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
    } ]
  }
}

เชœเซ‹เช•เซ‡, เชœเซ‹ เช†เชชเชฃเซ‡ เชธเชพเชฎเช—เซเชฐเซ€ เช•เซเชทเซ‡เชคเซเชฐเชฎเชพเช‚ "เชตเชพเชฐเซเชคเชพเช“" เชถเซ‹เชงเซ€เชถเซเช‚, เชคเซ‹ เช†เชชเชฃเชจเซ‡ เช•เช‚เชˆ เชฎเชณเชถเซ‡ เชจเชนเซ€เช‚, เช•เชพเชฐเชฃ เช•เซ‡ เช…เชจเซเช•เซเชฐเชฎเชฃเชฟเช•เชพเชฎเชพเช‚ เชซเช•เซเชค เชฎเซ‚เชณ เชถเชฌเซเชฆเซ‹ เช›เซ‡, เชคเซ‡เชฎเชจเชพ เชฎเซ‚เชณ เชจเชฅเซ€. เช—เซเชฃเชตเชคเซเชคเชพเชฏเซเช•เซเชค เชถเซ‹เชง เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เช†เชชเชฃเซ‡ เชตเชฟเชถเซเชฒเซ‡เชทเช•เชจเซ‡ เช—เซ‹เช เชตเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡.

เช•เซเชทเซ‡เชคเซเชฐ _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"
        }
      }
    }
  }
}'

เชšเชพเชฒเซ‹ เช† เช‡เชจเซเชกเซ‡เช•เซเชธ (เชฌเซเชฒเซ‹เช—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

เชœเซ‹ เชคเชฎเชจเซ‡ เชธเชฎเชพเชจ เชŸเซเชฏเซเชŸเซ‹เชฐเซ€เชฏเชฒ เชฒเซ‡เช–เซ‹เชฎเชพเช‚ เชฐเชธ เชนเซ‹เชฏ, เชจเชตเชพ เชฒเซ‡เช–เซ‹ เชฎเชพเชŸเซ‡ เชตเชฟเชšเชพเชฐเซ‹ เชนเซ‹เชฏ, เช…เชฅเชตเชพ เช•เซ‹เชˆ เชธเชนเชฏเซ‹เช— เชธเซ‚เชšเชจเซ‹ เชนเซ‹เชฏ, เชคเซ‹ เชฎเชจเซ‡ เช–เชพเชจเช—เซ€ เชธเช‚เชฆเซ‡เชถ เชฆเซเชตเชพเชฐเชพ เช…เชฅเชตเชพ m.kuzmin+habr@darkleaf.ru เชชเชฐ เช‡เชฎเซ‡เช‡เชฒ เชฆเซเชตเชพเชฐเชพ เชคเชฎเชพเชฐเชพ เชคเชฐเชซเชฅเซ€ เชธเชพเช‚เชญเชณเชตเชพเชฎเชพเช‚ เช†เชจเช‚เชฆ เชฅเชถเซ‡.

เชธเซ‹เชฐเซเชธ: www.habr.com