備忘φ(..)メモ.
この記事に書いてあることはだいぶ古いです.
参考
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 が送られないようなので注意.
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" }
}
}