Elasticsearch
概念
クラスタ
1つ以上のノードのコレクション
一意の名前で識別される (デフォルトでは elasticsearch)
インデクシング、検索機能を統合的に提供する
ノード
一意の名前で識別される (デフォルトでは UUID)
特定のクラスタに所属させることができる (デフォルトでは elasticsearch)
インデックス
同様の特性を持つドキュメント群
名前で識別される
タイプ
インデックスに対して 1 つ以上定義できる
ユーザが自由に定義できる論理的なカテゴリ/区分
ドキュメント
情報の基本単位
インデックスに紐付けられる
JSON で表現される
API
検索 API
bank インデックスに対して検索を行う。
q=* インデックス内の全てのドキュメント
sort=account_number:asc 書くドキュメントの account_number を昇順でソート
code:shell
GET /bank/_search?q=*&sort=account_number:asc&pretty
code:shell
Query DSL
2種類の節から構成される、クエリの AST と捉えられる
Leaf query clauses
特定のフィールドの特定の値を探索する
match, term, range クエリ等
Compound query clauses
他の Leaf/Compound query をラップする
論理的に結合する (bool, dis_max)
振る舞いを変更する (constant_score)
クエリの節 (clause) は、記述される 場所 (context) によって振る舞いが変わる
Query context
ドキュメントが どのくらいマッチしているか?
相対的な _score の計算をする
query パラメータに渡された Query clause の振る舞い
search API における query パラメータ
Filter context
ドキュメントが マッチしているか?
Y/N で答えられる
結果は大抵キャッシュされる
filter パラメータに渡された Query clause の振る舞い
bool クエリにおける filter, must_not パラメータ
constant_score クエリにおける filter パラメータ
query は Query context を表す
bool, match は Query context 内で利用されている
ドキュメントがどの程度マッチしているか?スコアを算出する
filter は Filter context を表す
term, range は Filter context ないで利用されている
マッチしないドキュメントはフィルタする
ただし、スコアの計算には影響しない
code:json
GET /_search
{
"query": {
"bool": {
"must": [
{ "match": { "title": "Search" }},
{ "match": { "content": "Elasticsearch" }}
],
"filter": [
{ "term": { "status": "published" }},
{ "range": { "publish_date": { "gte": "2015-01-01" }}}
]
}
}
}
メモ
デフォルトポート
HTTP 用は 9200
ノード間のコミュニケーション用は 9300
code:bash
docker run -it --rm -p 9200:9200 -p 9300:9300 -e "http.host=0.0.0.0" -e "transport.host=127.0.0.1" docker.elastic.co/elasticsearch/elasticsearch:5.1.1