ื™ืกื•ื“ื•ืช Elasticsearch

Elasticsearch ื”ื•ื ืžื ื•ืข ื—ื™ืคื•ืฉ ืขื json rest api, ื”ืžืฉืชืžืฉ ื‘-Lucene ื•ื›ืชื•ื‘ ื‘-Java. ืชื™ืื•ืจ ืฉืœ ื›ืœ ื”ื™ืชืจื•ื ื•ืช ืฉืœ ืžื ื•ืข ื–ื” ื–ืžื™ืŸ ื‘ ื”ืืชืจ ื”ืจืฉืžื™. ื‘ื”ืžืฉืš ื ืชื™ื™ื—ืก ืืœ Elasticsearch ื›ืืœ ES.

ืžื ื•ืขื™ื ื“ื•ืžื™ื ืžืฉืžืฉื™ื ืœื—ื™ืคื•ืฉื™ื ืžื•ืจื›ื‘ื™ื ื‘ืžืกื“ ื ืชื•ื ื™ื ืฉืœ ืžืกืžื›ื™ื. ืœื“ื•ื’ืžื”, ื—ื™ืคื•ืฉ ืชื•ืš ื”ืชื—ืฉื‘ื•ืช ื‘ืžื•ืจืคื•ืœื•ื’ื™ื” ืฉืœ ื”ืฉืคื” ืื• ื—ื™ืคื•ืฉ ืœืคื™ ืงื•ืื•ืจื“ื™ื ื˜ื•ืช ื’ื™ืื•ื’ืจืคื™ื•ืช.

ื‘ืžืืžืจ ื–ื” ืื“ื‘ืจ ืขืœ ื”ื™ืกื•ื“ื•ืช ืฉืœ ES ื‘ืืžืฆืขื•ืช ื”ื“ื•ื’ืžื” ืฉืœ ืื™ื ื“ืงืก ืคื•ืกื˜ื™ื ื‘ื‘ืœื•ื’. ืื ื™ ืืจืื” ืœืš ืื™ืš ืœืกื ืŸ, ืœืžื™ื™ืŸ ื•ืœื—ืคืฉ ืžืกืžื›ื™ื.

ื›ื“ื™ ืœื ืœื”ื™ื•ืช ืชืœื•ื™ ื‘ืžืขืจื›ืช ื”ื”ืคืขืœื”, ืื’ื™ืฉ ืืช ื›ืœ ื”ื‘ืงืฉื•ืช ืœ-ES ื‘ืืžืฆืขื•ืช CURL. ื™ืฉ ื’ื ืชื•ืกืฃ ืœื’ื•ื’ืœ ื›ืจื•ื ืฉื ืงืจื ืชื—ื•ืฉื”.

ื”ื˜ืงืกื˜ ืžื›ื™ืœ ืงื™ืฉื•ืจื™ื ืœืชื™ืขื•ื“ ื•ืœืžืงื•ืจื•ืช ื ื•ืกืคื™ื. ื‘ืกื•ืฃ ื™ืฉ ืงื™ืฉื•ืจื™ื ืœื’ื™ืฉื” ืžื”ื™ืจื” ืœืชื™ืขื•ื“. ื ื™ืชืŸ ืœืžืฆื•ื ื”ื’ื“ืจื•ืช ืฉืœ ืžื•ื ื—ื™ื ืœื ืžื•ื›ืจื™ื ื‘ ืžื™ืœื•ื ื™ ืžื•ื ื—ื™ื.

ื”ืชืงื ืช ES

ืœืฉื ื›ืš, ืื ื• ื–ืงื•ืงื™ื ืชื—ื™ืœื” ืœ-Java. ืžืคืชื—ื™ื ืœื”ืžืœื™ืฅ ื”ืชืงืŸ ื’ืจืกืื•ืช Java ื—ื“ืฉื•ืช ื™ื•ืชืจ ืžืขื“ื›ื•ืŸ Java 8 20 ืื• Java 7 ืขื“ื›ื•ืŸ 55.

ื”ืคืฆืช ES ื–ืžื™ื ื” ื‘ื›ืชื•ื‘ืช ืืชืจ ืœืžืคืชื—ื™ื. ืœืื—ืจ ืคื™ืจื•ืง ื”ืืจื›ื™ื•ืŸ ืขืœื™ืš ืœืจื•ืฅ bin/elasticsearch. ื–ืžื™ืŸ ื’ื ื—ื‘ื™ืœื•ืช ืขื‘ื•ืจ apt ื•-yum. ื™ืฉ ืชืžื•ื ื” ืจืฉืžื™ืช ืขื‘ื•ืจ docker. ืขื•ื“ ืขืœ ื”ืชืงื ื”.

ืœืื—ืจ ื”ื”ืชืงื ื” ื•ื”ื”ืฉืงื”, ื‘ื•ืื• ื ื‘ื“ื•ืง ืืช ื”ืคื•ื ืงืฆื™ื•ื ืœื™ื•ืช:

# ะดะปั ัƒะดะพะฑัั‚ะฒะฐ ะทะฐะฟะพะผะฝะธะผ ะฐะดั€ะตั ะฒ ะฟะตั€ะตะผะตะฝะฝัƒัŽ
#export ES_URL=$(docker-machine ip dev):9200
export ES_URL=localhost:9200

curl -X GET $ES_URL

ื ืงื‘ืœ ืžืฉื”ื• ื›ื–ื”:

{
  "name" : "Heimdall",
  "cluster_name" : "elasticsearch",
  "version" : {
    "number" : "2.2.1",
    "build_hash" : "d045fc29d1932bce18b2e65ab8b297fbf6cd41a1",
    "build_timestamp" : "2016-03-09T09:38:54Z",
    "build_snapshot" : false,
    "lucene_version" : "5.4.1"
  },
  "tagline" : "You Know, for Search"
}

ืื™ื ื“ืงืก

ื‘ื•ืื• ื ื•ืกื™ืฃ ืคื•ืกื˜ ืœ-ES:

# ะ”ะพะฑะฐะฒะธะผ ะดะพะบัƒะผะตะฝั‚ c id 1 ั‚ะธะฟะฐ post ะฒ ะธะฝะดะตะบั blog.
# ?pretty ัƒะบะฐะทั‹ะฒะฐะตั‚, ั‡ั‚ะพ ะฒั‹ะฒะพะด ะดะพะปะถะตะฝ ะฑั‹ั‚ัŒ ั‡ะตะปะพะฒะตะบะพ-ั‡ะธั‚ะฐะตะผั‹ะผ.

curl -XPUT "$ES_URL/blog/post/1?pretty" -d'
{
  "title": "ะ’ะตัะตะปั‹ะต ะบะพั‚ัั‚ะฐ",
  "content": "<p>ะกะผะตัˆะฝะฐั ะธัั‚ะพั€ะธั ะฟั€ะพ ะบะพั‚ัั‚<p>",
  "tags": [
    "ะบะพั‚ัั‚ะฐ",
    "ัะผะตัˆะฝะฐั ะธัั‚ะพั€ะธั"
  ],
  "published_at": "2014-09-12T20:44:42+00:00"
}'

ืชื’ื•ื‘ืช ื”ืฉืจืช:

{
  "_index" : "blog",
  "_type" : "post",
  "_id" : "1",
  "_version" : 1,
  "_shards" : {
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  },
  "created" : false
}

ES ื ื•ืฆืจ ื‘ืื•ืคืŸ ืื•ื˜ื•ืžื˜ื™ - ืžื“ื“ ื‘ืœื•ื’ ื• ั‚ะธะฟ ื”ื•ื“ืขื”. ืื ื• ื™ื›ื•ืœื™ื ืœืฆื™ื™ืจ ืื ืœื•ื’ื™ื” ืžื•ืชื ื™ืช: ืื™ื ื“ืงืก ื”ื•ื ืžืกื“ ื ืชื•ื ื™ื, ื•ืกื•ื’ ื”ื•ื ื˜ื‘ืœื” ื‘ืžืกื“ ื ืชื•ื ื™ื ื–ื”. ืœื›ืœ ืกื•ื’ ื™ืฉ ืกื›ืžื” ืžืฉืœื• - ืžื™ืคื•ื™, ืžืžืฉ ื›ืžื• ื˜ื‘ืœื” ื™ื—ืกื™ืช. ื”ืžื™ืคื•ื™ ื ื•ืฆืจ ื‘ืื•ืคืŸ ืื•ื˜ื•ืžื˜ื™ ื›ืืฉืจ ื”ืžืกืžืš ืžืชื•ื•ืกืฃ ืœืื™ื ื“ืงืก:

# ะŸะพะปัƒั‡ะธะผ 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 ืžืื—ืกื ืช ืžืกืžืš ืžืงื•ืจ ื“ื—ื•ืก. ืื ืื ื—ื ื• ืฆืจื™ื›ื™ื ืจืง ืืช ื”ืžื–ื”ื”, ื•ืœื ืืช ื›ืœ ืžืกืžืš ื”ืžืงื•ืจ, ืื– ื ื•ื›ืœ ืœื”ืฉื‘ื™ืช ืืช ืื—ืกื•ืŸ ื”ืžืงื•ืจ.

ืื ืื™ื ื ื• ื–ืงื•ืงื™ื ืœืžื™ื“ืข ื ื•ืกืฃ, ื ื•ื›ืœ ืœืงื‘ืœ ืจืง ืืช ื”ืชื•ื›ืŸ ืฉืœ _source:

curl -XGET "$ES_URL/blog/post/1/_source?pretty"
{
  "title" : "ะ’ะตัะตะปั‹ะต ะบะพั‚ัั‚ะฐ",
  "content" : "<p>ะกะผะตัˆะฝะฐั ะธัั‚ะพั€ะธั ะฟั€ะพ ะบะพั‚ัั‚<p>",
  "tags" : [ "ะบะพั‚ัั‚ะฐ", "ัะผะตัˆะฝะฐั ะธัั‚ะพั€ะธั" ],
  "published_at" : "2014-09-12T20:44:42+00:00"
}

ืืชื” ื™ื›ื•ืœ ื’ื ืœื‘ื—ื•ืจ ืจืง ืฉื“ื•ืช ืžืกื•ื™ืžื™ื:

# ะธะทะฒะปะตั‡ะตะผ ั‚ะพะปัŒะบะพ ะฟะพะปะต title
curl -XGET "$ES_URL/blog/post/1?_source=title&pretty"
{
  "_index" : "blog",
  "_type" : "post",
  "_id" : "1",
  "_version" : 1,
  "found" : true,
  "_source" : {
    "title" : "ะ’ะตัะตะปั‹ะต ะบะพั‚ัั‚ะฐ"
  }
}

ื‘ื•ืื• ื ื•ืกื™ืฃ ืœืื™ื ื“ืงืก ืขื•ื“ ื›ืžื” ืคื•ืกื˜ื™ื ื•ื ืคืขื™ืœ ืฉืื™ืœืชื•ืช ืžื•ืจื›ื‘ื•ืช ื™ื•ืชืจ.

curl -XPUT "$ES_URL/blog/post/2" -d'
{
  "title": "ะ’ะตัะตะปั‹ะต ั‰ะตะฝะบะธ",
  "content": "<p>ะกะผะตัˆะฝะฐั ะธัั‚ะพั€ะธั ะฟั€ะพ ั‰ะตะฝะบะพะฒ<p>",
  "tags": [
    "ั‰ะตะฝะบะธ",
    "ัะผะตัˆะฝะฐั ะธัั‚ะพั€ะธั"
  ],
  "published_at": "2014-08-12T20:44:42+00:00"
}'
curl -XPUT "$ES_URL/blog/post/3" -d'
{
  "title": "ะšะฐะบ ัƒ ะผะตะฝั ะฟะพัะฒะธะปัั ะบะพั‚ะตะฝะพะบ",
  "content": "<p>ะ”ัƒัˆะตั€ะฐะทะดะธั€ะฐัŽั‰ะฐั ะธัั‚ะพั€ะธั ะฟั€ะพ ะฑะตะดะฝะพะณะพ ะบะพั‚ะตะฝะบะฐ ั ัƒะปะธั†ั‹<p>",
  "tags": [
    "ะบะพั‚ัั‚ะฐ"
  ],
  "published_at": "2014-07-21T20:44:42+00:00"
}'

ะกะพั€ั‚ะธั€ะพะฒะบะฐ

# ะฝะฐะนะดะตะผ ะฟะพัะปะตะดะฝะธะน ะฟะพัั‚ ะฟะพ ะดะฐั‚ะต ะฟัƒะฑะปะธะบะฐั†ะธะธ ะธ ะธะทะฒะปะตั‡ะตะผ ะฟะพะปั title ะธ published_at
curl -XGET "$ES_URL/blog/post/_search?pretty" -d'
{
  "size": 1,
  "_source": ["title", "published_at"],
  "sort": [{"published_at": "desc"}]
}'
{
  "took" : 8,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "failed" : 0
  },
  "hits" : {
    "total" : 3,
    "max_score" : null,
    "hits" : [ {
      "_index" : "blog",
      "_type" : "post",
      "_id" : "1",
      "_score" : null,
      "_source" : {
        "title" : "ะ’ะตัะตะปั‹ะต ะบะพั‚ัั‚ะฐ",
        "published_at" : "2014-09-12T20:44:42+00:00"
      },
      "sort" : [ 1410554682000 ]
    } ]
  }
}

ื‘ื—ืจื ื• ื‘ืคื•ืกื˜ ื”ืื—ืจื•ืŸ. size ืžื’ื‘ื™ืœ ืืช ืžืกืคืจ ื”ืžืกืžื›ื™ื ืฉื™ื•ื ืคืงื•. total ืžืฆื™ื’ ืืช ื”ืžืกืคืจ ื”ื›ื•ืœืœ ืฉืœ ื”ืžืกืžื›ื™ื ื”ืชื•ืืžื™ื ืืช ื”ื‘ืงืฉื”. sort ื‘ืคืœื˜ ืžื›ื™ืœ ืžืขืจืš ืฉืœ ืžืกืคืจื™ื ืฉืœืžื™ื ืฉืœืคื™ื”ื ืžืชื‘ืฆืข ื”ืžื™ื•ืŸ. ื”ึธื”ึตืŸ. ื”ืชืืจื™ืš ื”ื•ืžืจ ืœืžืกืคืจ ืฉืœื. ืžื™ื“ืข ื ื•ืกืฃ ืขืœ ืžื™ื•ืŸ ื ื™ืชืŸ ืœืžืฆื•ื ื‘ ืชื™ืขื•ื“.

ืžืกื ื ื™ื ื•ืฉืื™ืœืชื•ืช

ES ืžืื– ื’ืจืกื” 2 ืœื ืžื‘ื—ื™ืŸ ื‘ื™ืŸ ืžืกื ื ื™ื ืœืฉืื™ืœืชื•ืช, ื‘ืžืงื•ื ื–ืืช ืžื•ืฉื’ ื”ื”ืงืฉืจื™ื ืžื•ืฆื’.
ื”ืงืฉืจ ืฉืื™ืœืชื” ืฉื•ื ื” ืžื”ืงืฉืจ ืžืกื ืŸ ื‘ื›ืš ืฉื”ืฉืื™ืœืชื” ืžื™ื™ืฆืจืช ืฆื™ื•ืŸ _ ื•ืื™ื ื” ืžืื•ื—ืกื ืช ื‘ืžื˜ืžื•ืŸ. ืื ื™ ืืจืื” ืœืš ืžื” ื–ื” _ืฆื™ื•ืŸ ืžืื•ื—ืจ ื™ื•ืชืจ.

ืกื ืŸ ืœืคื™ ืชืืจื™ืš

ืื ื• ืžืฉืชืžืฉื™ื ื‘ื‘ืงืฉื” ืจื›ืก ื‘ื”ืงืฉืจ ืฉืœ ืžืกื ืŸ:

# ะฟะพะปัƒั‡ะธะผ ะฟะพัั‚ั‹, ะพะฟัƒะฑะปะธะบะพะฒะฐะฝะฝั‹ะต 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, ื›ืœื•ืžืจ ื”ืชืืžื” ืžืœืื” ืœืžืกื ืŸ.

ืžื ืชื—ื™ื

ืžื ืชื—ื™ื ื ื—ื•ืฆื™ื ื›ื“ื™ ืœื”ืžื™ืจ ืืช ื˜ืงืกื˜ ื”ืžืงื•ืจ ืœืกื˜ ืฉืœ ืืกื™ืžื•ื ื™ื.
ืžื ืชื—ื™ื ืžื•ืจื›ื‘ื™ื ืžืื—ื“ ื˜ื•ืงื ื™ื–ืจ ื•ื›ืžื” ืื•ืคืฆื™ื•ื ืœื™ื™ื TokenFilters. ื ื™ืชืŸ ืœื”ืงื“ื™ื ืœื˜ื•ืงื ื™ื™ื–ืจ ื›ืžื” ืžืกื ื ื™ Char. Tokenizers ืžืคืจืงื™ื ืืช ืžื—ืจื•ื–ืช ื”ืžืงื•ืจ ืœืืกื™ืžื•ื ื™ื, ื›ื’ื•ืŸ ืจื•ื•ื—ื™ื ื•ืชื•ื•ื™ ืคื™ืกื•ืง. TokenFilter ื™ื›ื•ืœ ืœืฉื ื•ืช ืืกื™ืžื•ื ื™ื, ืœืžื—ื•ืง ืื• ืœื”ื•ืกื™ืฃ ื—ื“ืฉื™ื, ืœืžืฉืœ ืœื”ืฉืื™ืจ ืจืง ืืช ื’ื–ืข ื”ืžื™ืœื”, ืœื”ืกื™ืจ ืžื™ืœื•ืช ื™ื—ืก, ืœื”ื•ืกื™ืฃ ืžื™ืœื™ื ื ืจื“ืคื•ืช. CharFilter - ืžืฉื ื” ืืช ื›ืœ ืžื—ืจื•ื–ืช ื”ืžืงื•ืจ, ืœืžืฉืœ, ื’ื•ื–ืจ ืชื’ื™ html.

ืœ-ES ื™ืฉ ื›ืžื” ืžื ืชื—ื™ื ืกื˜ื ื“ืจื˜ื™ื™ื. ืœื“ื•ื’ืžื”, ืžื ืชื— ืจื•ืกื™.

ื‘ื•ืื• ื ืฉืชืžืฉ API ื•ื‘ื•ืื• ื ืจืื” ื›ื™ืฆื“ ื”ืžื ืชื—ื™ื ื”ืกื˜ื ื“ืจื˜ื™ื™ื ื•ื”ืจื•ืกื™ื ื”ื•ืคื›ื™ื ืืช ื”ืžื—ืจื•ื–ืช "ืกื™ืคื•ืจื™ื ืžืฆื—ื™ืงื™ื ืขืœ ื—ืชืœืชื•ืœื™ื":

# ะธัะฟะพะปัŒะทัƒะตะผ ะฐะฝะฐะปะธะทะฐั‚ะพั€ standard       
# ะพะฑัะทะฐั‚ะตะปัŒะฝะพ ะฝัƒะถะฝะพ ะฟะตั€ะตะบะพะดะธั€ะพะฒะฐั‚ัŒ ะฝะต ASCII ัะธะผะฒะพะปั‹
curl -XGET "$ES_URL/_analyze?pretty&analyzer=standard&text=%D0%92%D0%B5%D1%81%D0%B5%D0%BB%D1%8B%D0%B5%20%D0%B8%D1%81%D1%82%D0%BE%D1%80%D0%B8%D0%B8%20%D0%BF%D1%80%D0%BE%20%D0%BA%D0%BE%D1%82%D1%8F%D1%82"
{
  "tokens" : [ {
    "token" : "ะฒะตัะตะปั‹ะต",
    "start_offset" : 0,
    "end_offset" : 7,
    "type" : "<ALPHANUM>",
    "position" : 0
  }, {
    "token" : "ะธัั‚ะพั€ะธะธ",
    "start_offset" : 8,
    "end_offset" : 15,
    "type" : "<ALPHANUM>",
    "position" : 1
  }, {
    "token" : "ะฟั€ะพ",
    "start_offset" : 16,
    "end_offset" : 19,
    "type" : "<ALPHANUM>",
    "position" : 2
  }, {
    "token" : "ะบะพั‚ัั‚",
    "start_offset" : 20,
    "end_offset" : 25,
    "type" : "<ALPHANUM>",
    "position" : 3
  } ]
}
# ะธัะฟะพะปัŒะทัƒะตะผ ะฐะฝะฐะปะธะทะฐั‚ะพั€ russian
curl -XGET "$ES_URL/_analyze?pretty&analyzer=russian&text=%D0%92%D0%B5%D1%81%D0%B5%D0%BB%D1%8B%D0%B5%20%D0%B8%D1%81%D1%82%D0%BE%D1%80%D0%B8%D0%B8%20%D0%BF%D1%80%D0%BE%20%D0%BA%D0%BE%D1%82%D1%8F%D1%82"
{
  "tokens" : [ {
    "token" : "ะฒะตัะตะป",
    "start_offset" : 0,
    "end_offset" : 7,
    "type" : "<ALPHANUM>",
    "position" : 0
  }, {
    "token" : "ะธัั‚ะพั€",
    "start_offset" : 8,
    "end_offset" : 15,
    "type" : "<ALPHANUM>",
    "position" : 1
  }, {
    "token" : "ะบะพั‚",
    "start_offset" : 20,
    "end_offset" : 25,
    "type" : "<ALPHANUM>",
    "position" : 3
  } ]
}

ื”ืžื ืชื— ื”ืกื˜ื ื“ืจื˜ื™ ื—ื™ืœืง ืืช ื”ืžื—ืจื•ื–ืช ืœืคื™ ืจื•ื•ื—ื™ื ื•ื”ืžื™ืจ ื”ื›ืœ ืœืื•ืชื™ื•ืช ืงื˜ื ื•ืช, ื”ืžื ืชื— ื”ืจื•ืกื™ ื”ืกื™ืจ ืžื™ืœื™ื ืœื ื—ืฉื•ื‘ื•ืช, ื”ืžื™ืจ ืื•ืชืŸ ืœืื•ืชื™ื•ืช ืงื˜ื ื•ืช ื•ื”ืฉืื™ืจ ืืช ื’ื–ืข ื”ืžื™ืœื™ื.

ื‘ื•ืื• ื ืจืื” ื‘ืื™ืœื• Tokenizer, TokenFilters, CharFilters ืžืฉืชืžืฉ ื”ืžื ืชื— ื”ืจื•ืกื™:

{
  "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 ื™ื•ืกืจื• ืžืžื—ืจื•ื–ืช ื”ืžืงื•ืจ, ืœืื—ืจ ืžื›ืŸ ืชืงืŸ ื”ื˜ื•ืงื ื™ื™ื–ืจ ื™ืคืฆืœ ืื•ืชื” ืœืืกื™ืžื•ื ื™ื, ื”ืืกื™ืžื•ื ื™ื ืฉื™ืชืงื‘ืœื• ื™ืขื‘ืจื• ืœืื•ืชื™ื•ืช ืงื˜ื ื•ืช, ืžื™ืœื™ื ืœื ืžืฉืžืขื•ืชื™ื•ืช ื™ื•ืกืจื•, ื•ื”ืืกื™ืžื•ื ื™ื ื”ื ื•ืชืจื™ื ื™ื™ืฉืืจื• ื’ื–ืข ื”ืžื™ืœื”.

ื™ืฆื™ืจืช ืื™ื ื“ืงืก

ืœืžืขืœื” ืชื™ืืจื ื• ืืช ืžื ืชื— ื‘ืจื™ืจืช ื”ืžื—ื“ืœ. ื–ื” ื™ื—ื•ืœ ืขืœ ื›ืœ ืฉื“ื•ืช ื”ืžื—ืจื•ื–ืช. ื”ืคื•ืกื˜ ืฉืœื ื• ืžื›ื™ืœ ืžืขืจืš ืฉืœ ืชื’ื™ื, ื›ืš ืฉื”ืชื’ื™ื ื™ืขื•ื‘ื“ื• ื’ื ืขืœ ื™ื“ื™ ื”ืžื ืชื—. ื›ื™ ืื ื• ืžื—ืคืฉื™ื ืคื•ืกื˜ื™ื ืœืคื™ ื”ืชืืžื” ืžื“ื•ื™ืงืช ืœืชื’, ื•ืื– ืขืœื™ื ื• ืœื”ืฉื‘ื™ืช ืืช ื”ื ื™ืชื•ื— ืขื‘ื•ืจ ืฉื“ื” ื”ืชื’ื™ื.

ื‘ื•ืื• ื ื™ืฆื•ืจ ืื™ื ื“ืงืก blog2 ืขื ืžื ืชื— ื•ืžื™ืคื•ื™, ืฉื‘ื• ื”ื ื™ืชื•ื— ืฉืœ ืฉื“ื” ื”ืชื’ื™ื ืžื•ืฉื‘ืช:

curl -XPOST "$ES_URL/blog2" -d'
{
  "settings": {
    "analysis": {
      "filter": {
        "ru_stop": {
          "type": "stop",
          "stopwords": "_russian_"
        },
        "ru_stemmer": {
          "type": "stemmer",
          "language": "russian"
        }
      },
      "analyzer": {
        "default": {
          "char_filter": [
            "html_strip"
          ],
          "tokenizer": "standard",
          "filter": [
            "lowercase",
            "ru_stop",
            "ru_stemmer"
          ]
        }
      }
    }
  },
  "mappings": {
    "post": {
      "properties": {
        "content": {
          "type": "string"
        },
        "published_at": {
          "type": "date"
        },
        "tags": {
          "type": "string",
          "index": "not_analyzed"
        },
        "title": {
          "type": "string"
        }
      }
    }
  }
}'

ื‘ื•ืื• ื ื•ืกื™ืฃ ืืช ืื•ืชื 3 ืคื•ืกื˜ื™ื ืœืื™ื ื“ืงืก ื”ื–ื” (blog2). ืื ื™ ืืฉืžื™ื˜ ืืช ื”ืชื”ืœื™ืš ื”ื–ื” ื›ื™... ื–ื” ื“ื•ืžื” ืœื”ื•ืกืคืช ืžืกืžื›ื™ื ืœืื™ื ื“ืงืก ื”ื‘ืœื•ื’.

ื—ื™ืคื•ืฉ ื˜ืงืกื˜ ืžืœื ืขื ืชืžื™ื›ื” ื‘ื‘ื™ื˜ื•ื™ื™ื

ื‘ื•ืื• ื ืกืชื›ืœ ืขืœ ืกื•ื’ ืื—ืจ ืฉืœ ื‘ืงืฉื”:

# ะฝะฐะนะดะตะผ ะดะพะบัƒะผะตะฝั‚ั‹, ะฒ ะบะพั‚ะพั€ั‹ั… ะฒัั‚ั€ะตั‡ะฐะตั‚ัั ัะปะพะฒะพ 'ะธัั‚ะพั€ะธะธ'
# 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