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

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

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

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

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

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

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

เช† เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เช†เชชเชฃเซ‡ เชชเชนเซ‡เชฒเชพ เชœเชพเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡. เชตเชฟเช•เชพเชธเช•เชฐเซเชคเชพเช“ เชญเชฒเชพเชฎเชฃ 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 เชฆเซเชตเชพเชฐเชพ เชฆเชธเซเชคเชพเชตเซ‡เชœ เชชเซเชจเชƒเชชเซเชฐเชพเชชเซเชค เช•เชฐเซ€ เชฐเชนเซเชฏเชพ เช›เซ€เช:

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

เชœเซ‹ เช…เชฎเชจเซ‡ เชตเชงเชพเชฐเชพเชจเซ€ เชฎเชพเชนเชฟเชคเซ€เชจเซ€ เชœเชฐเซ‚เชฐ เชจ เชนเซ‹เชฏ, เชคเซ‹ เช…เชฎเซ‡ เชซเช•เซเชค _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 เชœเชจเชฐเซ‡เชŸ เช•เชฐเซ‡ เช›เซ‡ เช…เชจเซ‡ เช•เซ‡เชถเซเชก เชจเชฅเซ€. เชนเซเช‚ เชคเชฎเชจเซ‡ เชชเช›เซ€เชฅเซ€ เชฌเชคเชพเชตเซ€เชถ เช•เซ‡ _เชธเซเช•เซ‹เชฐ เชถเซเช‚ เช›เซ‡.

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

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

# ะฟะพะปัƒั‡ะธะผ ะฟะพัั‚ั‹, ะพะฟัƒะฑะปะธะบะพะฒะฐะฝะฝั‹ะต 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 เชจเซ€ เชฌเชฐเชพเชฌเชฐ เชนเชถเซ‡, เชœเซ‡เชจเซ‹ เช…เชฐเซเชฅ เชซเชฟเชฒเซเชŸเชฐ เชธเชพเชฅเซ‡ เชธเช‚เชชเซ‚เชฐเซเชฃ เชฎเซ‡เชณ เช›เซ‡.

เชตเชฟเชถเซเชฒเซ‡เชทเช•เซ‹

เชตเชฟเชถเซเชฒเซ‡เชทเช•เซ‹ เชธเซเชคเซเชฐเซ‹เชค เชŸเซ‡เช•เซเชธเซเชŸเชจเซ‡ เชŸเซ‹เช•เชจเซเชธเชจเชพ เชธเชฎเซ‚เชนเชฎเชพเช‚ เช•เชจเซเชตเชฐเซเชŸ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชœเชฐเซ‚เชฐเซ€ เช›เซ‡.
เชตเชฟเชถเซเชฒเซ‡เชทเช•เซ‹เชฎเชพเช‚ เชเช• เชนเซ‹เชฏ เช›เซ‡ เชŸเซ‹เช•เชฟเชจเชพเช‡เชเชฐ เช…เชจเซ‡ เช•เซ‡เชŸเชฒเชพเช• เชตเซˆเช•เชฒเซเชชเชฟเช• เชŸเซ‹เช•เชจเชซเชฟเชฒเซเชŸเชฐเซเชธ. เชŸเซ‹เช•เชจเชพเช‡เชเชฐเชจเซ€ เช†เช—เชณ เช•เซ‡เชŸเชฒเชพเช• เชนเซ‹เชˆ เชถเช•เซ‡ เช›เซ‡ เชšเชพเชฐเชซเชฟเชฒเซเชŸเชฐเซเชธ. เชŸเซ‹เช•เชจเชพเช‡เชเชฐเซเชธ เชธเซเชคเซเชฐเซ‹เชค เชธเซเชŸเซเชฐเชฟเช‚เช—เชจเซ‡ เชŸเซ‹เช•เชจเซเชธเชฎเชพเช‚ เชคเซ‹เชกเซ‡ เช›เซ‡, เชœเซ‡เชฎ เช•เซ‡ เชธเซเชชเซ‡เชธ เช…เชจเซ‡ เชตเชฟเชฐเชพเชฎเชšเชฟเชนเซเชจ เช…เช•เซเชทเชฐเซ‹. TokenFilter เชŸเซ‹เช•เชจเซเชธ เชฌเชฆเชฒเซ€ เชถเช•เซ‡ เช›เซ‡, เช•เชพเชขเซ€ เชถเช•เซ‡ เช›เซ‡ เช…เชฅเชตเชพ เชจเชตเชพ เช‰เชฎเซ‡เชฐเซ€ เชถเช•เซ‡ เช›เซ‡, เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, เชซเช•เซเชค เชถเชฌเซเชฆเชจเชพ เชธเซเชŸเซ‡เชฎเชจเซ‡ เช›เซ‹เชกเซ€ เชฆเซ‹, เชชเซ‚เชฐเซเชตเชจเชฟเชฐเซเชงเชพเชฐเชฃ เชฆเซ‚เชฐ เช•เชฐเซ‹, เชธเชฎเชพเชจเชพเชฐเซเชฅเซ€ เช‰เชฎเซ‡เชฐเซ‹. CharFilter - เชธเชฎเช—เซเชฐ เชธเซเชคเซเชฐเซ‹เชค เชถเชฌเซเชฆเชฎเชพเชณเชพเชจเซ‡ เชฌเชฆเชฒเซ‡ เช›เซ‡, เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, 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