Elasticsearch ๊ธฐ๋ณธ ์‚ฌํ•ญ

Elasticsearch๋Š” Lucene์„ ์‚ฌ์šฉํ•˜๊ณ  Java๋กœ ์ž‘์„ฑ๋œ JSON REST API๋ฅผ ๊ฐ–์ถ˜ ๊ฒ€์ƒ‰ ์—”์ง„์ž…๋‹ˆ๋‹ค. ์ด ์—”์ง„์˜ ๋ชจ๋“  ์žฅ์ ์— ๋Œ€ํ•œ ์„ค๋ช…์€ ๋‹ค์Œ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ณต์‹ ์›น ์‚ฌ์ดํŠธ์ด์ œ๋ถ€ํ„ฐ Elasticsearch๋ฅผ ES๋ผ๊ณ  ๋ถ€๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ์—”์ง„์€ ๋ฌธ์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๋ณต์žกํ•œ ๊ฒ€์ƒ‰์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์–ธ์–ด ํ˜•ํƒœ๋ฅผ ๊ณ ๋ คํ•œ ๊ฒ€์ƒ‰์ด๋‚˜ ์ง€๋ฆฌ ์ขŒํ‘œ๋ฅผ ์ด์šฉํ•œ ๊ฒ€์ƒ‰์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ๊ธ€์—์„œ๋Š” ๋ธ”๋กœ๊ทธ ๊ฒŒ์‹œ๋ฌผ ์ธ๋ฑ์‹ฑ ์‚ฌ๋ก€๋ฅผ ํ†ตํ•ด ES์˜ ๊ธฐ๋ณธ ์‚ฌํ•ญ์„ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋ฌธ์„œ๋ฅผ ํ•„ํ„ฐ๋ง, ์ •๋ ฌ, ๊ฒ€์ƒ‰ํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ๋ณด์—ฌ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.

์šด์˜ ์ฒด์ œ์— ์˜์กดํ•˜์ง€ ์•Š๊ธฐ ์œ„ํ•ด ๋ชจ๋“  ์š”์ฒญ์€ CURL์„ ์‚ฌ์šฉํ•˜์—ฌ ES์— ์ „๋‹ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. Google Chrome์šฉ ํ”Œ๋Ÿฌ๊ทธ์ธ๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ๊ฐ.

๋ณธ๋ฌธ ์ „์ฒด์— ๊ฑธ์ณ ๋ฌธ์„œ ๋ฐ ๊ธฐํƒ€ ์ถœ์ฒ˜์— ๋Œ€ํ•œ ๋งํฌ๊ฐ€ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค. ๋งˆ์ง€๋ง‰์—๋Š” ๋ฌธ์„œ์— ๋น ๋ฅด๊ฒŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๋งํฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ต์ˆ™ํ•˜์ง€ ์•Š์€ ์šฉ์–ด์˜ ์ •์˜๋Š” ๋‹ค์Œ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์šฉ์–ด์ง‘.

ES ์„ค์น˜

์ด๋ฅผ ์œ„ํ•ด์„œ๋Š” ๋จผ์ € Java๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž ์ถ”์ฒœํ•˜๋‹ค Java 8 ์—…๋ฐ์ดํŠธ 20 ๋˜๋Š” Java 7 ์—…๋ฐ์ดํŠธ 55๋ณด๋‹ค ์ตœ์‹  Java ๋ฒ„์ „์„ ์„ค์น˜ํ•˜์„ธ์š”.

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๊ฐ€ ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋จ ์ƒ‰์ธ ๋ธ”๋กœ๊ทธ์™€ ั‚ะธะฟ ๊ฒŒ์‹œ๋ฌผ์ž…๋‹ˆ๋‹ค. ์กฐ๊ฑด๋ถ€ ๋น„์œ ๋ฅผ ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ธ๋ฑ์Šค๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์ด๊ณ , ํƒ€์ž…์€ ์ด DB์˜ ํ…Œ์ด๋ธ”์ž…๋‹ˆ๋‹ค. ๊ฐ ํƒ€์ž…์€ ๊ณ ์œ ํ•œ ์Šคํ‚ค๋งˆ๋ฅผ ๊ฐ–์Šต๋‹ˆ๋‹ค. ๋งคํ•‘๊ด€๊ณ„ํ˜• ํ…Œ์ด๋ธ”๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค. ๋ฌธ์„œ๊ฐ€ ์ธ๋ฑ์‹ฑ๋˜๋ฉด ๋งคํ•‘์ด ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

# ะŸะพะปัƒั‡ะธะผ 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๋Š” ๋‹จ์ผ ๊ฐ’๊ณผ ๊ฐ’ ๋ฐฐ์—ด์„ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์ ์— ์œ ์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, title ํ•„๋“œ์—๋Š” ์ œ๋ชฉ๋งŒ ํฌํ•จ๋˜๊ณ , tags ํ•„๋“œ์—๋Š” ๋ฌธ์ž์—ด ๋ฐฐ์—ด์ด ํฌํ•จ๋˜์ง€๋งŒ, ๋งคํ•‘์—์„œ๋Š” ๋™์ผํ•œ ๋ฐฉ์‹์œผ๋กœ ํ‘œํ˜„๋ฉ๋‹ˆ๋‹ค.
๋งคํ•‘์— ๋Œ€ํ•ด์„œ๋Š” ๋‚˜์ค‘์— ๋” ์ž์„ธํžˆ ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์š”์ฒญ

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"
}'

์ •๋ ฌ

# ะฝะฐะนะดะตะผ ะฟะพัะปะตะดะฝะธะน ะฟะพัั‚ ะฟะพ ะดะฐั‚ะต ะฟัƒะฑะปะธะบะฐั†ะธะธ ะธ ะธะทะฒะปะตั‡ะตะผ ะฟะพะปั 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" }
    }
  }
}'

ํƒœ๊ทธ๋กœ ํ•„ํ„ฐ๋ง

์šฐ๋ฆฌ๋Š” ์‚ฌ์šฉ ์šฉ์–ด ์ฟผ๋ฆฌ ์ฃผ์–ด์ง„ ๋‹จ์–ด๊ฐ€ ํฌํ•จ๋œ ๋ฌธ์„œ 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
    } ]
  }
}

ํ•˜์ง€๋งŒ ์ฝ˜ํ…์ธ  ํ•„๋“œ์—์„œ "stories"๋ฅผ ๊ฒ€์ƒ‰ํ•ด๋„ ์•„๋ฌด๊ฒƒ๋„ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ƒ‰์ธ์—๋Š” ์–ด๊ทผ์ด ์•„๋‹Œ ์›์–ด๋งŒ ํฌํ•จ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์–‘์งˆ์˜ ๊ฒ€์ƒ‰์„ ์œ„ํ•ด์„œ๋Š” ๋ถ„์„๊ธฐ๋ฅผ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ถ„์•ผ _score ์‡ผ ๊ด€๋ จ์„ฑ์ฟผ๋ฆฌ๊ฐ€ ํ•„ํ„ฐ ์ปจํ…์ŠคํŠธ์—์„œ ์‹คํ–‰๋˜๋Š” ๊ฒฝ์šฐ _score ๊ฐ’์€ ํ•ญ์ƒ 1์ด ๋˜๋ฉฐ, ์ด๋Š” ํ•„ํ„ฐ๋ฅผ ์™„๋ฒฝํ•˜๊ฒŒ ์ค€์ˆ˜ํ•จ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

๋ถ„์„๊ธฐ

๋ถ„์„๊ธฐ ์†Œ์Šค ํ…์ŠคํŠธ๋ฅผ ํ† ํฐ ์ง‘ํ•ฉ์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
๋ถ„์„๊ธฐ๋Š” ํ•˜๋‚˜๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค ํ† ํฌ ๋‚˜์ด์ € ๊ทธ๋ฆฌ๊ณ  ๋ช‡ ๊ฐ€์ง€ ์„ ํƒ ์‚ฌํ•ญ ํ† ํฐํ•„ํ„ฐ. ํ† ํฌ๋‚˜์ด์ €๋Š” ์—ฌ๋Ÿฌ ๊ฐœ๋กœ ์‹œ์ž‘๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฌธ์žํ•„ํ„ฐํ† ํฌ๋‚˜์ด์ €๋Š” ๊ณต๋ฐฑ์ด๋‚˜ ๊ตฌ๋‘์  ๊ธฐํ˜ธ ๋“ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ์›๋ณธ ๋ฌธ์ž์—ด์„ ํ† ํฐ์œผ๋กœ ๋ถ„ํ• ํ•ฉ๋‹ˆ๋‹ค. ํ† ํฐํ•„ํ„ฐ๋Š” ํ† ํฐ์„ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜, ํ† ํฐ์„ ์‚ญ์ œํ•˜๊ฑฐ๋‚˜ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋‹จ์–ด ์–ด๊ฐ„๋งŒ ๋‚จ๊ธฐ๊ฑฐ๋‚˜, ์ „์น˜์‚ฌ๋ฅผ ์ œ๊ฑฐํ•˜๊ฑฐ๋‚˜, ๋™์˜์–ด๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฌธ์žํ•„ํ„ฐ๋Š” ์›๋ณธ ๋ฌธ์ž์—ด์„ ์™„์ „ํžˆ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, 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"
        }
      }
    }
  }
}'

์ด ์ธ๋ฑ์Šค(blog3)์—๋„ ๊ฐ™์€ ๊ฒŒ์‹œ๋ฌผ 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"
      ]
    }
  }
}'

๋Ÿฌ์‹œ์•„์–ด ์–ด๊ฐ„ ๋ถ„์„๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ ์ด ์ฟผ๋ฆฌ๋Š” 'history'๋ผ๋Š” ๋‹จ์–ด๋งŒ ํฌํ•จ๋˜์–ด ์žˆ์–ด๋„ ๋ชจ๋“  ๋ฌธ์„œ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

์š”์ฒญ์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํŠน์ˆ˜ ๋ฌธ์ž๊ฐ€ ํฌํ•จ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

""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๋กœ ๋ฉ”์ผ์„ ๋ณด๋‚ด์ฃผ์‹œ๋ฉด ๊ธฐ์  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : habr.com