Elasticsearch

Elasticsearch CheatSheet

More than 3 years have passed since last update.

備忘φ(..)メモ.

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


参考


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