ども、cloudpack の かっぱ(@inokara)です。
前回の記事で @johtani さんに default_operator についてコメント頂いて、default_operator は全く意識しておらず自分のニワカっぷりに辛くなったので default_operator を含め search api と simple_query_string にフォーカスして改めて復習することにしました。(筆者の体力の都合上、全てを本ポストに記載するのは辛いのでシリーズ化してちょっとずつ書いていきます…)
今回は生で curl を叩くのではなくて Marvel に同梱されている sense を使って叩いてみたいと思います(案の定 Sensu と間違えました)
Elasticsearch のインストールは割愛して Marvel のインストール。
cd /usr/share/elasticsearch bin/plugin -i elasticsearch/marvel/latest
念のため、Elasticsearch を再起動。
sudo /etc/init.d/elasticsearch restart
Marvel とは?については @johtani さんのブログポストを御覧ください。
Marvel をセットアップしたらブラウザで http://${Elasticsearch_Host}:9200/_plugin/marvelにアクセスしましょう。以下のような、みんな大好き Kibana ページが表示されるかと思います。
一日見ていても飽きない位に色々な情報が出力されています。Marvel に関しての詳細は…
を御覧ください。
sense へのアクセスは Marvel の右上の Dashboards から…
sense を選択します。何度か申し上げておりますが…Sensu ではありませんのでご注意下さい。
上記のようなページが表示されます。
インデックス作成は以下のようなクエリを左ペインに書きます.
POST /test_index-1
{
"settings" : {
"number_of_shards" : 1
},
"mappings" : {
"type1" : {
"_source" : { "enabled" : false },
"properties" : {
"field1" : { "type" : "string" },
"field2" : { "type" : "string" },
"field3" : { "type" : "string" }
}
}
}
}
左ペインに記載したら右上の緑色の再生ボタンをクリックすると…
インデックスが正常に作成されたようです。
上記で作成したインデックスにドキュメントを登録してみましょう。以下のようなクエリを書きます。
PUT /test_index-1/test/1
{
"field1" : "川原 洋平",
"field2" : "aho",
"field3" : "hage"
}
{
"_index": "test_index-1",
"_type": "test",
"_id": "1",
"_version": 1,
"created": true
}
先ほど登録したドキュメントを検索してみたいと思いますので以下のようなクエリを書いてみます。
GET /test_index-1/_search?pretty
{
"fields": [ "field1","field2","field3"],
"query" : {
"simple_query_string" : {
"fields": ["field1"],
"query": "田中 洋平"
}
}
}
あれっ、結果が 2 件だ…「田中 洋平」は一件のはずなのに…ということで実際の出力結果は以下のとおりです。
{
"took": 2,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"failed": 0
},
"hits": {
"total": 2,
"max_score": 0.8226396,
"hits": [
{
"_index": "test_index-1",
"_type": "test",
"_id": "2",
"_score": 0.8226396,
"fields": {
"field1": [
"田中 洋平"
],
"field3": [
"hage"
],
"field2": [
"aho"
]
}
},
{
"_index": "test_index-1",
"_type": "test",
"_id": "1",
"_score": 0.10741998,
"fields": {
"field1": [
"川原 洋平"
],
"field3": [
"hage"
],
"field2": [
"aho"
]
}
}
]
}
}
「川原 洋平」もヒットしていますね…。はい、前回の記事でコメント頂いていた default_operator のデフォルト値 or の挙動のようです。
"default_operator": "and" オプションを付けてクエリを投げてみます。
GET /test_index-1/_search?pretty
{
"fields": [ "field1","field2","field3"],
"query" : {
"simple_query_string" : {
"fields": ["field1"],
"query": "田中 洋平",
"default_operator": "and"
}
}
}
おおっ
search api の基本について実際にクエリを投げながら試してみました。ちゃんと動かしながらだとイメージもつかみやすいですし、何よりも sense はクエリのシンタックスチェックもやってくれるのでクエリを実行する前の修正や確認もお手軽でした(JSON フォーマットのシンタックスチェックにも使えるかも)。
引続き、search api を弄っていければと思います。
最後になりますが、全国の「田中洋平」さん、「川原洋平」さん、例に使ってしまい申し訳ございませんでした。
元記事はこちらです。
「Elasticsearch の search api と simple_query_string を sense で復習するメモ(1)」