LoginSignup
207
195

More than 5 years have passed since last update.

Elasticsearch CheatSheet

Last updated at Posted at 2014-10-21

備忘φ(..)メモ.

この記事に書いてあることはだいぶ古いです.

参考

Basics

REST Request Type

Request Type 用途
GET オブジェクトの現在の状態を得る
POST オブジェクトの状態を変更
PUT オブジェクトを生成
DELETE オブジェクトを破棄

API

用途 Request Type End Point ex. remarks
インデックス作成 PUT /<index> curl -XPOST 'localhost:9200/piyo' -d @mapping.json
インデックス削除 DELETE /<index> /piyo
テンプレート作成 PUT /_template/<template> /piyo -d @template.json
テンプレート一覧 GET /_template/<template> /piyo_tmplate -d @template.json
テンプレート削除 DELETE /_template/<template> /piyo_tmplate
ドキュメント更新 POST /<index>/<type>/<id>/_update /piyo/doc/1/_update -d '{"text": "hello"}' 更新は一部のフィールドだけを指定可
ドキュメント削除 DELETE /<index>/<type>/<id> /piyo/doc/1
エイリアス取得 GET /_aliases, /<index>/_aliases /_aliases
エイリアス作成/削除 POST /_aliases /_aliases -d @alias.json 別途記載
設定確認 GET /_settings, /<index>/_settings /piyo/_settings filterとかtokenizerとかの確認はこっち
schema確認 GET /_mappings, /<index>/_mappings /piyo/_mappings schemaの確認はこちら

エイリアス

作成
curl -XPOST 'localhost:9200/_aliases' -d '{
  "actions": [
    {"remove": {"index": "piyo_201409", "alias" : "piyo"}},
    {"add": {"index": "piyo_201410", "alias" : "piyo"}},
    {"add": {"index": "piyo_201411", "alias" : "piyo"}},
    {"add": {"index": "piyo_201412", "alias" : "piyo"}}
  ]
}'

Query

メモ:Elasticsearch 的にはリクエストタイプは GET でも POST でも大丈夫なんだけど,kopf で REST 使うときは POST に設定しておかないと body が送られないようなので注意.

kopf.png

No. 用途
1 全インデックスへのリクエスト curl -XGET 'localhost:9200/_search' -d @query.json
2 インデックスへのみ指定 curl -XGET 'localhost:9200/piyo/_search' -d @query.json
3 インデックスとタイプを指定 curl -XGET 'localhost:9200/piyo/doc/_search' -d @query.json
4 複数のインデックスを指定 curl -XGET 'localhost:9200/piyo,foo,baa/_search' -d @query.json
5 複数のインデックスとタイプを指定 curl -XGET 'localhost:9200/piyo,foo,baa/doc,book,log/_search' -d @query.json

単純な例

単語「piyo」でtitleフィールドを検索.

curl -XGET 'localhost:9200/<index>/<doc_type>/_search?q=title:piyo'

term

アナライズされない検索

term
{
  "query" : {
    "term" : { "title" : "piyo" }
  }
}

match

アナライズされる検索

term
{
  "query" : {
    "match" : { "title" : "piyo" }
  }
}

boolean match

titleフィールドにfooとbaaが含まれているもの.
{
  "query" : {
    "match" : { 
      "title" : {
        "query": "foo baa",
        "operator" : "and"
      }
    }
  }
}

phrase match

フレーズ検索

fooとbaaの間に未知の単語をslop個許容したフレーズを検索
{
  "query" : {
    "match_phrase" : {
      "title" : {
        "query" : "foo baa",
        "slop" : 1
      }
    }
  }
}

match phrase prefix

フレーズ検索の末尾を緩くマッチさせる

最後の語句を前方一致させていくつの語句を書き換えるかと云ったことをするものらしい.

フレーズの末尾にmax_expansions個だけ語句をマッチさせる
{
  "query" : {
    "match_phrase" : {
      "title" : {
        "query" : "foo baa",
        "slop" : 1,
        "max_expansions" : 20,
      }
    }
  }
}

multi match

クエリを複数フィールドにあてる

multi_match
{
  "query" : {
    "multi_match" : {
      "query" : "foo baa",
      "fields" : ["title", "content"]
    }
  }
}

query string

Lucene のクエリを使う

TODO

field query

query string の簡易版

foo必須,baaオプション,piyo含まない
{
  "query" : {
    "field" : {
      "title" : "+foo baa -piyo"
    }
  }
}

IDs query

列挙した値で検索
未検証:文字列でもいいのかな?

ids
{
  "query" : {
    "ids" : {
      "values" : ["1", "3", "5"]
    }
  }
}

prefix query

term クエリの prefix 指定版

{
  "query" : {
    "prefix" : {
      "title" : "pi"
    }
  }
}

more like this

指定されたテキストに似ているドキュメントを検索

オプション 動作
fields クエリが対象にするフィールド(_all)
percent_terms_to_match 似ているドキュメントにマッチする語句のパーセンテージ(0.30)
min_term_freq ソースドキュメントに含まれる語句の頻度の最小値がこの値よりも低いものは無視(2)
min_doc_freq この値で示されるドキュメント数含まれていない語句は無視(5)
max_doc_freq この値で示されるドキュメント数より多く含まれる語句は無視(0:制限なし)
max_query_terms 生成されるクエリの語句の最大を指定
stop_words 無視される単語の配列を指定
min_word_length この値で指定される長さ以下の単語は無視(0)
max_word_length この値で指定される長さ以上の単語は無視(0:制限なし)
boost_terms 各語句をブーストするときの値(1)
boost クエリをブーストするときの値(1)
analyzer 使用するアナライザ
{
  "query" : {
    "more_like_this" : {
      "fields" : ["title", "content"],
      "like_text" : "piyo foo baa"
    }
  }
}

more like this field

more like this のフィールド指定版

{
  "query" : {
    "more_like_this_field" : {
      "title" {
        "like_text" : "piyo foo baa"
      }
    }
  }
}

fuzzy like this query

more like this に似てるけど,なるべく異なるドキュメントを検索する

{
  "query" : {
    "fuzzy_like_this" : {
      "fields" : ["title", "content"],
      "like_text" : "piyo foo baa"
    }
  }
}

fuzzy like this field query

fuzzy like this query のフィールド指定版

{
  "query" : {
    "fuzzy_like_this_field" : {
      "title" {
        "like_text" : "piyo foo baa"
      }
    }
  }
}

wild card query

性能悪いパフォーマンスに影響出るのでむやみに使わないこと

{
  "query" : {
    "wildcard" : {
      "title" : "pi?yo"
    }
  }
}

range query

範囲検索

{
  "query" : {
    "range" : {
      "ctime" : {
        "from" : "2014-10-21T18:47+0900",
        "to" : "2014-10-22T10:47+0900"
      }
    }
  }
}

Query Options

取得するフィールドの指定

fields
  "fields" : ["title", "content", "ctime"],
  "query" : {
    "match" : { "title" : "piyo" }
  }
}

カウント

search_type リクエストパラメータに指定する.エイリアス指定している場合は使えない?

curl -XGET 'localhost:9200/<index>/<doc_type>/_search?q=title:piyo&search_type=count'

ページング

paging
{
  "from" : 9,
  "to"   : 20,
  "query": {
    "match" : { "title" : "piyo" }
  }
}
207
195
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
207
195