ども、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 へアクセス
Marvel とは?については @johtani さんのブログポストを御覧ください。
Marvel をセットアップしたらブラウザで http://${Elasticsearch_Host}:9200/_plugin/marvel
にアクセスしましょう。以下のような、みんな大好き Kibana ページが表示されるかと思います。
一日見ていても飽きない位に色々な情報が出力されています。Marvel に関しての詳細は…
を御覧ください。
sense へのアクセス
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 }
メモ(2)
search api を叩いてみる
先ほど登録したドキュメントを検索してみたいと思いますので以下のようなクエリを書いてみます。
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
の挙動のようです。
efault_operator を and にしてみる
"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)」